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

Posted

技术标签:

【中文标题】在 plotly 中为子图共享相同的图例【英文标题】:Sharing same legends for subplots in plotly 【发布时间】:2020-06-30 05:22:29 【问题描述】:

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

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)

输出:

我想为两个子图共享相同的图例。所以,我尝试指定一个图例组 (ref)。有效,但出现重复标签

任何有关如何删除重复项的建议都会有所帮助

【问题讨论】:

使用,showlegend=False 帮助!。问题已解决。 请回答您自己的问题,以便其他人可以从中受益。 【参考方案1】:

在访问 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
                )

【讨论】:

请务必注意,您还应该将legendgroup 属性设置为与其他跟踪相同的值。我添加了showlegend=False 没有legendgroup,但它不起作用。

以上是关于在 plotly 中为子图共享相同的图例的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:将多个图形绘制为子图

如何在 Matplotlib 中为子图添加标题

Plotly:热图颜色图例我的子图

如何在 python 中为子图运行智能循环

Pandas df.plot 子图上有多个图例?

在Matplotlib中为子图添加边距[重复]