我正在尝试使用 Plotly 创建旭日图。我的数据由不同步骤的几种不同类型的旅程组成。有些旅程需要 10 步,有些则需要 100 步。但为了简单起见,我们只考虑 3 步。
这是数据 -
import pandas as pd
import plotly.express as px
import numpy as np
data = {
'step0' :['home', 'home','product2','product1','home'],
'step1' : ['product1','product1', None, 'product2',None] ,
'step2' : ['product2','checkout', None, None,None] ,
'total_sales' : [50,20,10,0,7]
}
data_df = pd.DataFrame(data)
data_df.head()
我现在尝试在旭日图中绘制这些步骤。由于某些旅程可能很短,因此在这些情况下后续步骤将标记为无
。
data_df = data_df.fillna('end')
绘制代码-
fig = px.sunburst(data_df, path=['step0','step1','step2'], values='total_sales', height = 400)
fig.show()
正如您在上面看到的,None 已被 end
填充,因为 Plotly 不喜欢 NA。但我不想在旭日图中显示end
。
我想重新创建这样的东西 -
https://bl.ocks.org/kerryrodden/7090426
如何在 Plotly 中实现此功能?
最佳答案
使用已有内容的一种解决方法是用 ""
等空字符串代替 fillna,这样图表上就不会显示单词 "end"
。然后,您可以循环遍历 fig.data[0]
对象中的标记颜色和标记标签,将标记颜色更改为透明 "rgba(0,0,0,0)"
对于每个与空字符串匹配的标签。
唯一的事情是,hovertemplate
仍将显示我们使用解决方法隐藏的旭日图部分的信息,但静态图像看起来是正确的。
例如:
import pandas as pd
import plotly.express as px
import numpy as np
data = {
'step0' :['home', 'home','product2','product1','home'],
'step1' : ['product1','product1', None, 'product2',None] ,
'step2' : ['product2','checkout', None, None,None] ,
'total_sales' : [50,20,10,0,7]
}
data_df = pd.DataFrame(data)
# data_df.head()
data_df = data_df.fillna(" ")
fig = px.sunburst(
data_df,
path=['step0','step1','step2'],
values='total_sales',
color=["red","orange","yellow","green","blue"],
height = 400
)
## set marker colors whose labels are " " to transparent
marker_colors = list(fig.data[0].marker['colors'])
marker_labels = list(fig.data[0]['labels'])
new_marker_colors = ["rgba(0,0,0,0)" if label==" " else color for (color, label) in zip(marker_colors, marker_labels)]
marker_colors = new_marker_colors
fig.data[0].marker['colors'] = marker_colors
fig.show()
关于python - 使用 Plotly 绘制旭日图时如何避免 None ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71442845/