同一张图表上的两个堆积面积图

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

绘制资产

我正在绘制 $MSTR 资产如下

fig = px.area(df_all, x='end', y='val', color='fact', title=f'{symbol.upper()} : Balance sheet', width=1000, height=600)

fig.add_trace(go.Scatter(x=df_assets['end'], y=df_assets['val'], mode='lines', name='Assets'))

st.plotly_chart(fig)

enter image description here

绘制负债

同样,我正在绘制这样的负债(这些显示为负值):

fig = px.area(df_all_liabilities, x='end', y='val', color='fact', title=f'{symbol.upper()} : Balance sheet', width=1000, height=600)

fig.add_trace(go.Scatter(x=df_liabilities['end'], y=df_liabilities['val'], mode='lines', name='Liabilities'))

st.plotly_chart(fig)

enter image description here

问题

有没有办法将这两者放在同一个图表上?

python plotly streamlit
1个回答
0
投票

您可以使用plotly.graph_objects在每个类别的循环过程中添加图形,也可以重用使用

px.area
创建的图形数据。我没有任何数据可以重现您的问题,因此我使用 reference 中的示例来创建带有子图的图表。通过将上下图之间的间距设置为零,我使它看起来像一个图。根据您的数据,可能需要进行一些调整。

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

df = px.data.gapminder()
df['pop2'] = df['pop']*-1

fig_t = px.area(df, x="year", y="pop", color="continent", line_group="country")
fig_b = px.area(df, x="year", y="pop2", color="continent", line_group="country")

fig = make_subplots(rows=2, cols=1,
                    shared_xaxes=True,
                    vertical_spacing=0,
                    specs=[[{'type': 'scatter'}], [{'type': 'scatter'}]],
                   )

for i in range(len(fig_top.data)):
    fig.add_trace(fig_top.data[i], row=1, col=1)
    
for k in range(len(fig_bottom.data)):
    fig.add_trace(fig_bottom.data[k], row=2, col=1)
    
fig.show()

Area graph

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