如何在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.JdbcOdbc...