我正在根据相同的数据源制作多个图,每个图上的标记代表同一组样本。如果我的数据位于表格或数据框中,则不同的图可能使用数据框的不同列,但每个图将包含数据框的每一行一个标记。
如何链接“A vs B”和“C vs D”的两个子图,以便当我放大“A vs B”上的选择时,它将自动放大到“C vs D”上的相应点,如下所示怎么样?
下面是数据示例,“a、b、c、d”键都通过“time”键链接。目前,显示了两个子图,但我不知道如何通过“时间”链接两个子图之间的缩放功能。
import plotly.subplots as subplots
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 15, 13, 17, 20],
'c': [2, 3, 4, 5, 6],
'd': [8, 12, 10, 14, 16],
'time': [1, 2, 3, 4, 5]
})
fig = subplots.make_subplots(rows=2, cols=1)
fig.add_trace(x=df['a'], y=df['b'], row=1, col=1)
fig.add_trace(x=df['c'], y=df['d'], row=2, col=1)
fig.show()
我尝试过共享 x 轴和 y 轴。然而,由于列之间的比例差异,它否定了绘图的目的。
此方法使用具有共享轴的
go.Figure
而不是子图。我从Python中的选择得到了这个想法
import plotly.graph_objects as go
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [10, 15, 13, 17, 20],
'c': [2, 3, 4, 5, 6],
'd': [8, 12, 10, 14, 16],
'time': [1, 2, 3, 4, 5]
})
fig = go.Figure()
fig.add_trace(go.Scatter(x=df['a'], y=df['b'], xaxis = 'x', yaxis = 'y', name='First'))
fig.add_trace(go.Scatter(x=df['c'], y=df['d'], yaxis = 'y2', name='Second'))
fig.update_layout(
autosize = False,
xaxis = dict(
zeroline = False,
domain = [0,1],
showgrid = False
),
yaxis = dict(
zeroline = False,
domain = [0,.45],
showgrid = False
),
xaxis2 = dict(
zeroline = False,
domain = [0,1],
showgrid = False
),
yaxis2 = dict(
zeroline = False,
domain = [0.55,1],
showgrid = False
)
)
fig.show()