问题描述
我有一个名为 my_customdata
的列表,其中包含一些 nan
值。当我绘制森伯斯特图表并将我的列表传递给 customdata
时,它会根据需要显示值。但是对于 nan
值,它会显示 0
(如果我将 si 前缀设置与 customdata 一起传递)或 null
如果我没有传递自定义 si 前缀格式。仅当列表中有 nan
时,我才想隐藏悬停标签中的数据。可以这样做吗?
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','PFV','PV','PV'],'parent': ['','','SA','Canada'],'value': [0,100,400,200,8,40,4,20,11,80,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()
解决方法
基于 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','PFV','PV','PV'],'parent': ['','','SA','Canada'],'value': [0,100,400,200,8,40,4,20,11,80,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()