如何与相应的行一起打开和关闭图例

回答

使用以下代码,我可以通过单击复选按钮来打开和关闭图表上的线条。
然而,这两个系列的传奇一直在流传。
我希望一个系列的传奇在该系列出现时消失。
请注意,我不想要的东西这样在这里,用户单击图例以打开和关闭系列,当系列关闭时,其图例图的线的 alpha 变为几乎透明。
我想要的是(通过图表本身外部的事件)要隐藏的线系列和要消失的图例中的相应条目,然后通过另一个切换再次重新存在。

这是代码:

import tkinter as tk
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


class App(tk.Frame):

    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)

        self.btn = tk.Label(parent, text='A simple plot')
        self.btn.grid(row=0, column=0, padx=20, pady=10)

        self.lfr = tk.LabelFrame(parent)
        self.lfr.grid(row=1, column=0)

        self.var_y = tk.IntVar()
        self.var_z = tk.IntVar()
        self.check_y = tk.Checkbutton(self.lfr, text="Chart of y", variable=self.var_y, command=self.checkbutton_changed)
        self.check_z = tk.Checkbutton(self.lfr, text="Chart of z", variable=self.var_z, command=self.checkbutton_changed)
        self.check_y.grid(column=0, row=1)
        self.check_z.grid(column=1, row=1)

        self.check_y.select()
        self.check_z.select()

        self.x = range(1, 11)
        self.y = [1, 2, 3, 2, 1, 3, 4, 5, 5, 5]
        self.z = [3, 1, 1, 3, 4, 5, 3, 2, 2, 2]

        fig = plt.figure(figsize=(8, 5))
        self.ax = fig.add_subplot(111)

        self.plot_y = self.ax.plot(self.x, self.y, label="data y")[0]
        self.plot_z = self.ax.plot(self.x, self.z, label="data z")[0]

        self.plot_y.set_visible(self.var_y.get())
        self.plot_z.set_visible(self.var_z.get())

        plt.legend()
        plt.gca().invert_yaxis()

        plt.xticks(self.x, rotation=60)

        self.canvas = FigureCanvasTkAgg(fig, master=parent)
        self.canvas.draw()
        self.canvas.get_tk_widget().grid(row=2, column=0, ipadx=40, ipady=20)

    def checkbutton_changed(self):
        self.plot_y.set_visible(self.var_y.get())
        self.plot_z.set_visible(self.var_z.get())

        self.ax.figure.canvas.draw()


if __name__ == '__main__':
    root = tk.Tk()
    App(root)
    root.mainloop()


我想我应该对图例做一些类似于我对系列所做的事情(使它们成为类变量,以便我以后可以在命令复选按钮的方法中使用它们),但我看不出究竟是什么......

其他改进也将不胜感激。
提前致谢

ynjxsjmh

在每个切换中使用句柄和标签更新matplotlib.pyplot.legend()

    def checkbutton_changed(self):
        print('---')
        self.plot_y.set_visible(self.var_y.get())
        self.plot_z.set_visible(self.var_z.get())

        handles = []
        labels = []

        if self.var_y.get():
            handles.append(self.plot_y)
            labels.append('data y')

        if self.var_z.get():
            handles.append(self.plot_z)
            labels.append('data z')

        plt.legend(handles, labels)

        self.ax.figure.canvas.draw()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何与Firefox一起打开和关闭SSH隧道?

如何与多个组一起控制图例

如何养猫和一起唱歌?

使用Pandas DF和Matplotlib绘制主轴线和副轴,但图例将一起显示。

将Streams与原始数据类型和相应的包装一起使用

通过点击图例来打开和关闭一系列Google图表

将单元格内容与相应的列一起分成单独的行

如何一起打开两个模态窗口

python seaborn:一起自定义线图和散点图(也是图例)

ggplot:将图对齐在一起,并添加通用标签和图例

一起添加InfoWindow,图例,比例尺和要素图层

将子图与yellowbrick一起使用并丢失图例和标题时出现问题

如何一起构造应该在Obj-C中相应执行的方法

如何获取与最大值一起显示的相应索引

关闭除与孩子一起打开的所有div外的所有div

关闭 ViewController 和关闭键盘不能一起工作

如何修复程序,使其可以与用户要求的任何数量的行和列一起使用?

如何使用Linux Shell脚本和Python脚本一起插入空白行?

如何一起使用“lt”和“gt”来过滤掉DataFrame中的错误行?

如何从列表中的表格行中一起获取表格标题和表格数据?

如何将扩展和折叠列表行与核心数据元素一起使用?

ggplot2:如何将带有图例的图例与已解析的标签集成在一起?

如何在单个页面上将多个ggplots与常见的x和y标签以及常见的图例结合在一起?

如何将 abline 与 geom_point 一起添加到图例

如何与关闭Cygwin一起自动关闭ssh-agent?

如何创建以打开和关闭行作为列的数据框

Mysql SELECT行NOT IN和GROUP在一起

如何一起改变一些矩阵行?

将 geom_line 和 geom_point 与 ggplotly 一起使用时的奇怪图例和工具提示文本