问题:如何为每个按钮选择的标记(条)分配颜色。
updatemenus
还需要补充什么吗?
如果我注释掉
color = 'GEO'
,以下代码可以正确生成图表,但我希望每个条形都具有不同的颜色。
import pandas as pd
import plotly
import plotly.express as px
import io
df = pd.read_csv(io.StringIO(""" num CAT GEO value1
1 A Ontario 40
2 A Quebec 20
3 A Manitoba 30
4 A Alberta 60
1 B Ontario 35
2 B Quebec 10
3 B Manitoba 20
4 B Alberta 10"""), sep="\s+")
dfA = df[df['CAT']=='A']
dfB = df[df['CAT']=='B']
fig = px.bar(dfA,
x = 'GEO',
y = 'value1',
color = 'GEO',
height = 400,
width = 700)
updatemenus = [{
'buttons': [{'method': 'update',
'label': 'Select: A or B',
'args': [{'y': [dfA['value1']],
'visible': True},
{'title':'A'},
],
'args2': [{'y': [dfB['value1']],
'visible': True},
{'title':'B'},
]
},
],
'type':'buttons',
'direction': 'down',
'showactive': True,}]
fig.update_layout(updatemenus = updatemenus)
fig.show()
您也许可以在express中处理这个问题,但是使用图形对象来创建一个图形,一次使用两类数据。隐藏类别。下拉功能为显示提供了显示隐藏列表。我对此图形数据有四个类别,因此我将列出显示隐藏。
import plotly.graph_objects as go
fig = go.Figure()
for c in df['CAT'].unique():
dff = df.query('CAT == @c')
for row in dff.itertuples():
fig.add_trace(go.Bar(x=[row.GEO], y=[row.value1], name=row.GEO, visible=True))
# category(CAT='B') hidden
for i in range(4):
fig.data[i+4].visible=False
updatemenus = [{
'buttons': [{'method': 'update',
'label': 'Select: A',
'args': [{'visible': [True,True,True,True,False,False,False,False]},
{'title':'A'}]},
{'method': 'update',
'label': 'Select: B',
'args': [{'visible': [False,False,False,False,True,True,True,True]},
{'title':'B'}]}
],
'type':'buttons',
'direction': 'down',
'showactive': True
}]
fig.update_layout(updatemenus = updatemenus)
fig.show()