簡體   English   中英

是否可以使用 plotly.express 創建子圖?

[英]Is it possible to create a subplot with plotly.express?

我想用 function plotly.express.line生成的 2 plot 創建一個子圖,這可能嗎? 鑒於 2 plot:

fig1 =px.line(df, x=df.index, y='average')
fig1.show()

fig2 = px.line(df, x=df.index, y='Volume')
fig2.show()

我想生成一個由 2 個子圖組成的唯一 plot(在示例圖 1 和圖 2 中)

不,不是直接的(正如 DerekO 簡潔描述的那樣)。 但是由於 plotly express 可以用相當復雜的數據集做一些非常了不起的事情,我看不出為什么你不應該偶然發現你想使用 plotly express 圖形的元素作為子圖的情況。 這是很有可能的。

下面是一個示例,我在px.data.stocks()數據集上使用px.line構建了 plotly 表達數字。 然后我 go 在For Loop中使用add_tracego.Scatter提取一些感興趣的元素以構建子圖設置。 您當然可以爭辯說您可以直接在數據源上輕松執行此操作。 但話又說回來,如最初所述,plotly express 本身就是一個出色的數據處理程序。

使用 plotly 表達數字作為源的子圖:

在此處輸入圖像描述

完整代碼:

import plotly.graph_objects as go
import plotly.express as px
import pandas as pd

from plotly.subplots import make_subplots

df = px.data.stocks().set_index('date')

fig1 = px.line(df[['GOOG', 'AAPL']])
fig2 = px.line(df[['AMZN', 'MSFT']])

fig = make_subplots(rows=2, cols=1)

for d in fig1.data:
    fig.add_trace((go.Scatter(x=d['x'], y=d['y'], name = d['name'])), row=1, col=1)
        
for d in fig2.data:
    fig.add_trace((go.Scatter(x=d['x'], y=d['y'],  name = d['name'])), row=2, col=1)
    
fig.show()

從文檔來看,Plotly express不支持任意子圖功能 您可以改為使用圖形對象和軌跡(注意go.Scatter是等效的):

import pandas as pd

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

## create some random data
df = pd.DataFrame(
    data={'average':[1,2,3], 'Volume':[7,3,6]}, 
    index=['a','b','c']
)

fig = make_subplots(rows=1, cols=2)

fig.add_trace(
    go.Scatter(x=df.index, y=df.average, name='average'),
    row=1, col=1
)

fig.add_trace(
    go.Scatter(x=df.index, y=df.Volume, name='Volume'),
    row=1, col=2
)

fig.show()

在此處輸入圖像描述

如果您剛剛生成了用於制作子圖的px圖形,則無需使用graph_objects模塊。 這是完整的代碼。

import plotly.express as px
import pandas as pd
from plotly.subplots import make_subplots

df = px.data.stocks().set_index('date')

fig1 = px.line(df[['GOOG', 'AAPL']])
fig2 = px.line(df[['AMZN', 'MSFT']])

fig = make_subplots(rows=2, cols=1)

fig.add_trace(fig1['data'][0], row=1, col=1)
fig.add_trace(fig1['data'][1], row=1, col=1)
fig.add_trace(fig2['data'][0], row=2, col=1)
fig.add_trace(fig2['data'][1], row=2, col=1)
    
fig.show()

繪制圖

如果每個 plot 中有兩個以上的變量,可以使用 for 循環也可以使用fig.add_trace方法添加跟蹤。

暫無
暫無

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

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