如何在matplotlib中使用图例选择实现多轴的自动缩放

如何解决如何在matplotlib中使用图例选择实现多轴的自动缩放

按照 Hiding lines after showing a pyplot figureHow to autoscaled graphs with picking legend (matplotlib)? 中的问题,我目前正在尝试弄清楚如何向多个轴添加自动缩放选项。

我更改了 matplotlib example about legend picking添加了第二个轴:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

fig = plt.figure(figsize=(8,6))
gs = gridspec.GridSpec(2,1,figure=fig)

x = np.arange(10)
ax1 = fig.add_subplot(gs[0,0])
line1,= ax1.plot(x,1 * x,label='y=1x')
line2,5 * x,label='y=5x')
leg1 = ax1.legend(loc='upper left',fancybox=True,shadow=True)
leg1.get_frame().set_alpha(0.4)


ax2 = fig.add_subplot(gs[1,0])
line3,= ax2.plot(x,5 * x ** 2,label='y=5x^2')
line4,1 * x ** 2,label='y=1x^2')
leg2 = ax2.legend(loc='upper left',shadow=True)
leg2.get_frame().set_alpha(0.4)

# we will set up a dict mapping legend line to orig line,and enable
# picking on the legend line
lines = [line1,line2]
lined = dict()
for legline,origline in zip(leg1.get_lines(),lines):
    legline.set_picker(5)  # 5 pts tolerance
    lined[legline] = origline

def onpick(event):
    # on the pick event,find the orig line corresponding to the
    # legend proxy line,and toggle the visibility
    legline = event.artist
    origline = lined[legline]
    vis = not origline.get_visible()
    origline.set_visible(vis)
    # Change the alpha on the line in the legend so we can see what lines
    # have been toggled
    if vis:
        legline.set_alpha(1.0)
    else:
        legline.set_alpha(0.2)
    ax1.relim(visible_only=True)
    ax1.autoscale_view()
    fig.canvas.draw()

fig.canvas.mpl_connect('pick_event',onpick)

plt.show()

但现在我被困在如何调整“on_pick”函数以实现 .relim(visible_only=True).autoscale_view() 以适用于多个轴。

此外,我真的不明白我需要如何更改代码的以下部分,以便让我的图例选择适用于多个轴。

lines = [line1,lines):
    legline.set_picker(5)  # 5 pts tolerance
    lined[legline] = origline

另一种解决方案是为 Kany 在 Hiding lines after showing a pyplot figure 中提供的代码实现自动缩放功能。但不确定如何完成。

有什么帮助吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?