簡體   English   中英

Plotly中雙軸堆積條形圖

[英]Stacked bar chart with dual axis in Plotly

請考慮以下示例:

import pandas as pd

mydata = pd.DataFrame({'time': [pd.to_datetime('2021-01-02'),
                               pd.to_datetime('2021-01-02'),
                               pd.to_datetime('2021-01-03'),
                               pd.to_datetime('2021-01-03')],
                      'group': ['a','b','a','b'],
                      'value': [1,3,3,5]})

myline = pd.DataFrame({'time': [pd.to_datetime('2021-01-02'),
                                 pd.to_datetime('2021-01-03')],
                       'value':[39,46]})

mydata
Out[222]: 
        time group  value
0 2021-01-02  a     1    
1 2021-01-02  b     3    
2 2021-01-03  a     3    
3 2021-01-03  b     5    

我正在嘗試創建一個雙軸圖表,其中一個軸上的myline中的線和另一個軸上的mydata堆積條形圖。

我下面的代碼幾乎實現了這一點,但幾乎沒有問題:

  1. 酒吧沒有堆疊!
  2. 因為我的數據有許多不同的類別,所以我需要使用具有許多不同colorscale的色標,例如dark24https://plotly.com/python/discrete-color/ )。 如何為條形的填充顏色指定它?

任何建議都非常感謝。 謝謝!

在此處輸入圖像描述

import plotly.graph_objects as go
from plotly.subplots import make_subplots

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
    go.Scatter(x=myline['time'], 
               y=myline["value"], 
               name="Column1", 
               mode="lines"),
    secondary_y=True
)

layout = go.Layout(barmode='stack')

for t in mydata['group'].unique():
    dfp = mydata.loc[mydata['group']==t]
    fig.add_trace(go.Bar(x=dfp['time'], 
                          y = dfp['value'], 
                          name=t,
                          text = t),
                  secondary_y=False)

fig.update_xaxes(title_text="Letter")

# Set y-axes titles
fig.update_yaxes(title_text="Column2", secondary_y=False)
fig.update_yaxes(title_text="Column1", secondary_y=True)
fig.update(layout_showlegend=False)
fig.show()

堆疊圖已設置,但未啟用,因此我將條形圖模式更改為堆疊並隱藏圖例。 此外,我在 graph_objects 中找不到顏色圖設置,因此我使用所需的顏色圖更新了默認顏色圖。 我用三個對象檢查了測試數據,它們更新為新顏色 map。 但是,我沒有 go 來檢查 24 colors,所以您必須自己檢查。

import plotly.graph_objects as go
from plotly.subplots import make_subplots
import plotly.express as px

colors = px.colors.qualitative.Dark24

fig = make_subplots(specs=[[{"secondary_y": True}]])

fig.add_trace(
    go.Scatter(x=myline['time'], 
               y=myline["value"], 
               name="Column1", 
               mode="lines"),
    secondary_y=True
)

#layout = go.Layout(barmode='stack')

for t in mydata['group'].unique():
    dfp = mydata.loc[mydata['group']==t]
    fig.add_trace(go.Bar(x=dfp['time'], 
                          y = dfp['value'], 
                          name=t,
                          text = t),
                  secondary_y=False)

fig.update_xaxes(title_text="Letter")

# Set y-axes titles
fig.update_yaxes(title_text="Column2", secondary_y=False)
fig.update_yaxes(title_text="Column1", secondary_y=True)
fig.update_layout(showlegend=False, barmode='stack')

fig.layout.colorway = colors
fig.show()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM