Plotly:将具有多个子图的图形添加到一个图形中

时间:2021-07-09 21:14:05

标签: python plotly

我想创建两个图形,每个图形都包含多个共享 xax 的子图,并将它们添加到一个图形中。 Multiple figures in subplots 建议使用仪表板,但我对该解决方案不满意,而且我认为在这种情况下您无法共享 xax。

我想创建带有子图的图形,例如这个例子:

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

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

# Sub figure 1
sub_fig1 = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02) 
candlestick1 = go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close'])

sub_fig1.add_trace(candlestick1, row=1, col=1)
sub_fig1.add_trace({'x': df['Date'], 'y': df['AAPL.Volume'], 'type': 'bar', 'name': 'Volume'}, row=2, col=1)
sub_fig1.update_layout(xaxis_rangeslider_visible=False)

    
# Sub figure 2
sub_fig2 = make_subplots(rows=2, cols=1, shared_xaxes=True, vertical_spacing=0.02) 
candlestick2 = go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close'])

sub_fig2.add_trace(candlestick2, row=1, col=1)
sub_fig2.add_trace({'x': df['Date'], 'y': df['AAPL.Volume'], 'type': 'bar', 'name': 'Volume'}, row=2, col=1)
sub_fig2.update_layout(xaxis_rangeslider_visible=False)

sub_fig1.show()
sub_fig2.show()

# Add both sub figures to one subplot
# ???

理想情况下,我想在同一行的相邻列上添加这些子图。这可能吗?

运行上面的代码后,我得到了以下图,但就像我说的,我希望这些数字并排在同一行上。 Code result

1 个答案:

答案 0 :(得分:0)

  • 关注轴布局的细节,你可以制作一个子图
  • 对于这种情况,只需要修改两个设置 - 见下文
sub_fig3 = make_subplots(rows=2, cols=2, shared_xaxes=True, vertical_spacing=0.02)

sub_fig3 = sub_fig3.add_trace(sub_fig1.data[0], row=1, col=1)
sub_fig3 = sub_fig3.add_trace(sub_fig1.data[1], row=2, col=1)
sub_fig3 = sub_fig3.add_trace(sub_fig2.data[0], row=1,col=2)
sub_fig3 = sub_fig3.add_trace(sub_fig2.data[1], row=2,col=2)


sub_fig3 = sub_fig3.update_layout(
    xaxis_rangeslider_visible=False, 
    xaxis3={"anchor": "y3"},
    xaxis2_rangeslider_visible=False,
)
sub_fig3.show()

enter image description here