Plotly:如何设置具有分组图例的多个子图?
Plotly: How to set up multiple subplots with grouped legends?
对于每个子图,我有 3 个单独的 line:2017,2018 年和 2019 年有 3 次“go.Scatter”,每个子图代表一个国家(25 个国家),总是这 3 年。我可以使用子图示例代码,但是所有 75 个图例 (25 X 3) 都将以不同的颜色放在一起,而且很乱。
我不需要在不同的子图中使用不同的颜色,我可以在所有子图中的 3 年中只使用 3 种不同的颜色和 3 个图例,如果我点击 2017 年,那么 2017 年所有 curve/line 消失在 25 个子图中。
任何人都可以分享示例代码吗?出于说明目的,它可以是 2 而不是 25。我在 Plotly 网站上找不到这个示例代码。
编辑:这是示例代码:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(
x=[3, 4, 5],
y=[1000, 1100, 1200],name="2017",
), row=1, col=1)
fig.add_trace(go.Scatter(
x=[2, 3, 4],
y=[1200, 1100, 1000],name="2018",
), row=1, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[100, 110, 120],name="2017",
), row=2, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[120, 110, 100],name="2018",
), row=2, col=1)
fig.append_trace(go.Scatter(
x=[0, 1, 2],
y=[10, 11, 12],name="2017",
), row=3, col=1)
fig.append_trace(go.Scatter(
x=[0, 1, 2],
y=[12, 11, 10],name="2018",
), row=3, col=1)
fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
offline.plot(fig,filename="subplots.html")
我希望只有 2 个图例:2017 年和 2018 年,而不是 6 个图例,如果所有 2017 年的 3 个子图都具有相同的颜色,则更容易
legendgroup
和 showlegend
的正确组合应该可以解决问题。通过下面的设置,所有 2017
轨迹都分配给相同的 legendgroup="2017"
。除了第一个之外,所有 2017
条轨迹都有 showlegend=False
。当然,2018
痕迹也是如此。试一试!
情节
完整代码
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(x=[3, 4, 5], y=[1000, 1100, 1200],
name="2017", legendgroup="2017",
line=dict(color='blue')),
row=1, col=1)
fig.add_trace(go.Scatter(x=[2, 3, 4], y=[1200, 1100, 1000],
name="2018",legendgroup="2018",
line=dict(color='red')),
row=1, col=1)
fig.add_trace(go.Scatter(x=[2, 3, 4], y=[100, 110, 120],
name="2017", legendgroup="2017",
line=dict(color='blue'),
showlegend=False),
row=2, col=1)
fig.append_trace(go.Scatter(x=[2, 3, 4], y=[120, 110, 100],
name="2018", legendgroup="2018",
line=dict(color='red'),
showlegend=False),
row=2, col=1)
fig.append_trace(go.Scatter(x=[0, 1, 2], y=[10, 11, 12],
name="2017", legendgroup="2017",
line=dict(color='blue'),
showlegend=False),
row=3, col=1)
fig.append_trace(go.Scatter(x=[0, 1, 2], y=[12, 11, 10],
name="2018", legendgroup="2018",
line=dict(color='red'),
showlegend=False),
row=3, col=1)
fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
#offline.plot(fig,filename="subplots.html")
fig.show()
对于每个子图,我有 3 个单独的 line:2017,2018 年和 2019 年有 3 次“go.Scatter”,每个子图代表一个国家(25 个国家),总是这 3 年。我可以使用子图示例代码,但是所有 75 个图例 (25 X 3) 都将以不同的颜色放在一起,而且很乱。
我不需要在不同的子图中使用不同的颜色,我可以在所有子图中的 3 年中只使用 3 种不同的颜色和 3 个图例,如果我点击 2017 年,那么 2017 年所有 curve/line 消失在 25 个子图中。
任何人都可以分享示例代码吗?出于说明目的,它可以是 2 而不是 25。我在 Plotly 网站上找不到这个示例代码。
编辑:这是示例代码:
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(
x=[3, 4, 5],
y=[1000, 1100, 1200],name="2017",
), row=1, col=1)
fig.add_trace(go.Scatter(
x=[2, 3, 4],
y=[1200, 1100, 1000],name="2018",
), row=1, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[100, 110, 120],name="2017",
), row=2, col=1)
fig.append_trace(go.Scatter(
x=[2, 3, 4],
y=[120, 110, 100],name="2018",
), row=2, col=1)
fig.append_trace(go.Scatter(
x=[0, 1, 2],
y=[10, 11, 12],name="2017",
), row=3, col=1)
fig.append_trace(go.Scatter(
x=[0, 1, 2],
y=[12, 11, 10],name="2018",
), row=3, col=1)
fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
offline.plot(fig,filename="subplots.html")
我希望只有 2 个图例:2017 年和 2018 年,而不是 6 个图例,如果所有 2017 年的 3 个子图都具有相同的颜色,则更容易
legendgroup
和 showlegend
的正确组合应该可以解决问题。通过下面的设置,所有 2017
轨迹都分配给相同的 legendgroup="2017"
。除了第一个之外,所有 2017
条轨迹都有 showlegend=False
。当然,2018
痕迹也是如此。试一试!
情节
完整代码
from plotly.subplots import make_subplots
import plotly.graph_objects as go
from plotly import offline
fig = make_subplots(rows=3, cols=1)
fig.add_trace(go.Scatter(x=[3, 4, 5], y=[1000, 1100, 1200],
name="2017", legendgroup="2017",
line=dict(color='blue')),
row=1, col=1)
fig.add_trace(go.Scatter(x=[2, 3, 4], y=[1200, 1100, 1000],
name="2018",legendgroup="2018",
line=dict(color='red')),
row=1, col=1)
fig.add_trace(go.Scatter(x=[2, 3, 4], y=[100, 110, 120],
name="2017", legendgroup="2017",
line=dict(color='blue'),
showlegend=False),
row=2, col=1)
fig.append_trace(go.Scatter(x=[2, 3, 4], y=[120, 110, 100],
name="2018", legendgroup="2018",
line=dict(color='red'),
showlegend=False),
row=2, col=1)
fig.append_trace(go.Scatter(x=[0, 1, 2], y=[10, 11, 12],
name="2017", legendgroup="2017",
line=dict(color='blue'),
showlegend=False),
row=3, col=1)
fig.append_trace(go.Scatter(x=[0, 1, 2], y=[12, 11, 10],
name="2018", legendgroup="2018",
line=dict(color='red'),
showlegend=False),
row=3, col=1)
fig.update_layout(height=600, width=600, title_text="Stacked Subplots")
#offline.plot(fig,filename="subplots.html")
fig.show()