在plotly中为子图共享相同的图例

14

我使用plotly的subplots在同一图中创建了两个图。

import plotly.graph_objects as go
import numpy as np
import pandas as pd
from plotly.subplots import make_subplots

df = pd.DataFrame(np.random.randint(0, 100, size=(20, 5)), columns=list('tABCD'))
df2 = pd.DataFrame(np.random.randint(0, 100, size=(20, 5)), columns=list('tABCD'))

fig = go.Figure()
fig = make_subplots(rows=1, cols=2)

fig.add_trace(go.Scatter(
                x=df.t,
                y=df['A'],
                name="1",
                line_color='deepskyblue',
                opacity=0.8,
                legendgroup='group1'),
                row=1, col=1
                )

fig.add_trace(go.Scatter(
                x=df.t,
                y=df['B'],
                name="2",
                line_color='dimgray',
                opacity=0.8,
                legendgroup='group2'),
                row=1, col=1
                )

fig.add_trace(go.Scatter(
                x=df.t,
                y=df['C'],
                name="3",
                line_color='blue',
                opacity=0.8,
                legendgroup='group3'),
                row=1, col=1
                )

fig.add_trace(go.Scatter(
                x=df.t,
                y=df['D'],
                name="4",
                line_color='red',
                opacity=0.8,
                legendgroup='group4'),
                row=1, col=1
                )

fig.add_trace(go.Scatter(
                x=df2.t,
                y=df2['A'],
                name="1",
                line_color='deepskyblue',
                opacity=0.8,
                legendgroup='group1'),
                row=1, col=2
                )

fig.add_trace(go.Scatter(
                x=df2.t,
                y=df2['B'],
                name="2",
                line_color='dimgray',
                opacity=0.8,
                legendgroup='group2'),
                row=1, col=2
                )

fig.add_trace(go.Scatter(
                x=df2.t,
                y=df2['C'],
                name="3",
                line_color='blue',
                opacity=0.8,
                legendgroup='group3'),
                row=1, col=2
                )

fig.add_trace(go.Scatter(
                x=df2.t,
                y=df2['D'],
                name="4",
                line_color='red',
                opacity=0.8,
                legendgroup='group4'),
                row=1, col=2
                )

fig.write_html('ts.html', auto_open=True)

输出: enter image description here

我希望两个子图使用相同的图例。因此,我尝试指定一个图例组(ref)。它可以工作,但是会出现重复标签。

有什么建议可以去除重复项吗?


1
使用 showlegend=False 很有帮助!问题已经解决。 - Natasha
1
请回答您自己的问题,以便其他人受益。 - Sundeep Pidugu
1个回答

24
在访问df2的实例中添加 showlegend = False 将删除重复的图例。
fig.add_trace(go.Scatter(
                x=df2.t,
                y=df2['A'],
                name="1",
                line_color='deepskyblue',
                opacity=0.8,
                legendgroup='group1',
                showlegend=False),
                row=1, col=2
                )

9
需要注意的是,您还应该将 "legendgroup" 属性设置为与其他跟踪相同的值。如果没有设置 "legendgroup",而只添加了 "showlegend=False",它将无效。 - lukeic
2
同意@lukeic的说法:没有legendgroup,就不会显示重复的图例,但单击图例无法隐藏所有曲线。自然而然地,对于不同的组,legendgroup应该是不同的。但在这个答案中并不是这样。 - Dr_Zaszuś

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接