是的,您可以使用 plotly express 构建子图。要么
1.直接通过参数facet_row和facet_colums(在这种情况下我们经常谈论facet plots,但它们是同一个东西),或者
2.间接通过“窃取”用 plotly express 构建的图形中的元素,并在标准 make_subplots() 和 fig.add_traces() 中使用它们
虽然 plotly.express 支持宽格式和长格式的数据,但我通常更喜欢从后者构建分面图。如果你有这样的数据集:
Date variable value
0 2019-11-04 average 4
1 2019-11-04 average 2
.
.
8 2019-12-30 volume 5
9 2019-12-30 volume 2
然后您可以通过以下方式构建子图:
fig = px.line(df, x='Date', y = 'value', facet_row = 'variable')
情节1:
默认情况下,px.line() 会将相同的颜色应用于两条线,但您可以通过以下方式轻松处理:
fig.update_traces(line_color)
这个完整的 sn-p 向您展示了如何:
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
df = pd.DataFrame({'Date': ['2019-11-04', '2019-11-04', '2019-11-18', '2019-11-18', '2019-12-16', '2019-12-16', '2019-12-30', '2019-12-30'],
'variable':['average', 'volume', 'average', 'volume', 'average','volume','average','volume'],
'value': [4,2,6,5,6,7,5,2]})
fig = px.line(df, x='Date', y = 'value', facet_row = 'variable')
fig.update_traces(line_color = 'red', row = 2)
fig.show()
方法二:make_subplots
既然 plotly express 可以用相当复杂的数据集做一些非常了不起的事情,我认为你没有理由不偶然发现你想使用 elements一个情节表达图作为子情节的来源。这是很有可能的。
下面是一个示例,我使用px.line 在px.data.stocks() 数据集上绘制图形表达数字。然后我继续使用add_trace 和go.Scatter 在For Loop 中提取一些感兴趣的元素来构建子图设置。您当然可以争辩说您可以直接在数据源上轻松地执行此操作。但话又说回来,正如最初所说,plotly express 本身就是一个出色的数据处理程序。
情节2:使用情节表达图作为来源的子情节:
完整代码:
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()