使用plotly
子图时,以下是一个典型示例(来自https://plotly.com/python/subplots/):
from plotly.subplots import make_subplots
import plotly.graph_objects as go
fig = make_subplots(rows=3, cols=1)
fig.append_trace(go.Scatter(x=[3, 4, 5], y=[1000, 1100, 1200]), row=1, col=1)
fig.append_trace(go.Scatter(x=[2, 3, 4], y=[100, 110, 120]), row=2, col=1)
fig.append_trace(go.Scatter(x=[0, 1, 2], y=[10, 11, 12]), row=3, col=1)
fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
fig.show()
当仅有三个数据系列时,这看起来还不错。但当有多达5个子图,每个子图都有几个数据系列时,就很难将图例中的项目与它们在图中出现的位置视觉关联。
是否可以将图例项向下移动,以使其与它们所在的图表对齐?
顺便说一下,我实际上是在R中工作,而不是Python,并且正在使用ggplot
和ggplotly()
生成单独图表的列表,然后像下面这样将它们组装起来:
p <- subplot(plots, shareX=TRUE, nrows=length(plots))
layout_args <- c(list(p,
title=title,
xaxis=list(title = 'Time (Local)'),
legend=list(orientation = 'v')),
yaxis_args)
p <- do.call(layout, layout_args)
htmlwidgets::saveWidget(htmlwidgets::as_widget(p), outfile)
但我猜想这个解决方案同样适用于R和Python。
jrmisty
在 https://community.plotly.com/t/plotly-subplots-with-individual-legends/1754/18 上似乎已经找到了部分解决方案,但不幸的是,那里的切换行为是将单个图的所有曲线作为一组进行切换。离成功很近了... - Ken Williamslayout(legend=list(tracegroupgap=150, groupclick="toggleitem"))
。 - Martin