Plotly:从悬停标签中隐藏'null'

2024-05-18 23:39:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为my_customdata的列表,其中有一些nan值。当我绘制一张太阳暴流图并将我的列表传递给customdata时,它会根据需要显示值。但是对于nan值,它会显示0(如果我将si前缀设置与customdata一起传递),或者null如果我没有传递自定义si前缀格式。只有当列表中有nan时,我才想在hoverlabel中隐藏数据。有可能吗

enter image description here

import pandas as pd
import plotly.express as px
import numpy as np


data = {
  'ids':['SA', 'NA', 'Brazil', 'Uruguay', 'USA', 'Canada', 'PFV Brazil', 'PV Brazil', 'PFV Uruguay', 'PV Uruguay', 'PFV USA', 'PV USA', 'PFV Canada', 'PV Canada'],
  'labels': ['SA', 'NA', 'Brazil', 'Uruguay', 'USA', 'Canada', 'PFV', 'PV', 'PFV', 'PV', 'PFV', 'PV', 'PFV', 'PV'],
  'parent': ['', '', 'SA', 'SA', 'NA', 'NA', 'Brazil', 'Brazil', 'Uruguay', 'Uruguay', 'USA', 'USA', 'Canada', 'Canada'],
  'value': [0, 0, 100, 100, 400, 200, 8, 40, 4, 20, 11, 80, 11, 80]
  }
my_customdata = [x/780*100 if x>80 else np.nan for x in data['value']]
my_customdata[0] = 200/780*100
my_customdata[1] = 600/780*100

fig =px.sunburst(data, names='labels', parents='parent',  values='value', ids='ids', color='value',
                color_continuous_scale='Blues')

fig.update_traces(customdata=my_customdata, hovertemplate='%{label}<br>%{customdata:,.5s}')
fig.show()

Tags: import列表valuemyassananpv
1条回答
网友
1楼 · 发布于 2024-05-18 23:39:42

here的答案的基础上,同样的方法也可以应用于这个问题,以得到一个有效的解决方案。(事实上,这是一个一站式解决方案,可以解决所有的plotly hoverlabel问题!)

import pandas as pd
import plotly.express as px
import numpy as np


data = {
  'ids':['SA', 'NA', 'Brazil', 'Uruguay', 'USA', 'Canada', 'PFV Brazil', 'PV Brazil', 'PFV Uruguay', 'PV Uruguay', 'PFV USA', 'PV USA', 'PFV Canada', 'PV Canada'],
  'labels': ['SA', 'NA', 'Brazil', 'Uruguay', 'USA', 'Canada', 'PFV', 'PV', 'PFV', 'PV', 'PFV', 'PV', 'PFV', 'PV'],
  'parent': ['', '', 'SA', 'SA', 'NA', 'NA', 'Brazil', 'Brazil', 'Uruguay', 'Uruguay', 'USA', 'USA', 'Canada', 'Canada'],
  'value': [0, 0, 100, 100, 400, 200, 8, 40, 4, 20, 11, 80, 11, 80]
  }
my_customdata = [x/780*100 if x>80 else np.nan for x in data['value']]
my_customdata[0] = 200/780*100
my_customdata[1] = 600/780*100

fig =px.sunburst(data, names='labels', parents='parent',  values='value', ids='ids', color='value',
                color_continuous_scale='Blues')

df = pd.DataFrame(my_customdata)

def human_format(num):
    num = float('{:.3g}'.format(num))
    magnitude = 0
    while abs(num) >= 1000:
        magnitude += 1
        num /= 1000.0
    return '{}{}'.format('{:f}'.format(num).rstrip('0').rstrip('.'), 
                         ['', 'K', 'M', 'B', 'T'][magnitude])

df["hover_data"] = df.apply(lambda r:f"{human_format(r[0])}",axis=1)
df = df.replace('nan','')

fig.update_traces(customdata=df['hover_data'], hovertemplate='%{label}<br>%{customdata}')
fig.show()

enter image description here

相关问题 更多 >

    热门问题