情节:从hoverlabels隐藏`null`

问题描述

我有一个名为 my_customdata 的列表,其中包含一些 nan 值。当我绘制森伯斯特图表并将我的列表传递给 customdata 时,它会根据需要显示值。但是对于 nan 值,它会显示 0(如果我将 si 前缀设置与 customdata 一起传递)或 null 如果我没有传递自定义 si 前缀格式。仅当列表中有 nan 时,我才想隐藏悬停标签中的数据。可以这样做吗?

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','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()

enter image description here