使用 python 绘图 - 折线图取消选择全部

问题描述 投票:0回答:4

我得到了一个折线图,其中有多条线代表不同频率的正弦波。

我想看一下特定的波浪,而其余的都不在图表中。我知道我可以在图例中单击我不想看到的线条,这样它们就会消失。

我想知道是否有一种交互式方式可以一次单击取消选择所有行,而不是单击每一行。

我的代码:

import numpy as np
import plotly.graph_objects as go

step = 1/1000
t = np.arange(0,1,step)    # time vector
trig_func = lambda ff : np.sin(2*np.pi*ff*t)

fig = go.Figure()

for freq in [1, 3, 5, 7]:
    y = trig_func(freq)
    fig.add_trace(go.Scatter(x=t, y=y, name=f"{freq} Hz"))

fig.show()

我的图表: enter image description here

所需图表: enter image description here

python plot plotly
4个回答
9
投票

您可以双击图例中的线

您还可以使用

visible = "legendonly"
设置默认情况下不显示线条,例如:

go.Scatter(x = data[x],
           y = data[y],
           visible = "legendonly")

7
投票

在展示图之前,添加这部分:

fig.update_layout(dict(updatemenus=[
                        dict(
                            type = "buttons",
                            direction = "left",
                            buttons=list([
                                dict(
                                    args=["visible", "legendonly"],
                                    label="Deselect All",
                                    method="restyle"
                                ),
                                dict(
                                    args=["visible", True],
                                    label="Select All",
                                    method="restyle"
                                )
                            ]),
                            pad={"r": 10, "t": 10},
                            showactive=False,
                            x=1,
                            xanchor="right",
                            y=1.1,
                            yanchor="top"
                        ),
                    ]
              ))

这将添加按钮以一次取消选择和选择所有轨迹。它应该看起来像这样:

Result Chart

有关plotly中自定义按钮的更多信息:https://plotly.com/python/custom-buttons/


5
投票

现在双击图例似乎可以取消选择所有图例。我正在 google colab 中测试提问者的代码。情节版本是5.5.0。 诀窍是确保在双击之前选择图例。并且双击需要非常快,比平常更快。
选择单个图例后,您也可以双击它来选择全部。


0
投票

这可以通过利用 plotly 的双击延迟来完成。

import numpy as np
import plotly.graph_objects as go

config = {'doubleClickDelay': 1000}

step = 1/1000
t = np.arange(0,1,step)    # time vector
trig_func = lambda ff : np.sin(2*np.pi*ff*t)

fig = go.Figure()

for freq in [1, 3, 5, 7]:
    y = trig_func(freq)
    fig.add_trace(go.Scatter(x=t, y=y, name=f"{freq} Hz"))

fig.show(config=config)
© www.soinside.com 2019 - 2024. All rights reserved.