plotly.express.bar 为每个按钮选择的标记分配颜色

问题描述 投票:0回答:1

问题:如何为每个按钮选择的标记(条)分配颜色。

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

电流输出:

所需输出:

plotly plotly-python
1个回答
0
投票

您也许可以在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()

© www.soinside.com 2019 - 2024. All rights reserved.