【问题标题】:Matplotlib pick event with multiple axes具有多个轴的 Matplotlib 选择事件
【发布时间】:2020-07-13 23:25:13
【问题描述】:

我正在使用两个支持选择线条的轴进行绘图。 我正在使用 matplotlib 和 twinx() 命令。不幸的是,pick 事件仅针对最顶部轴中的艺术家调用(参见下面的示例)。

import matplotlib.pyplot as plt
import numpy as np

def onPick(event):
    print(event.artist.get_label())
    
def pick():
    fig=plt.figure(figsize=(5, 4), dpi=100, tight_layout=True)
    axis_1=fig.add_subplot(111)
    axis_2=axis_1.twinx()

    axis_1.set_ylim(0, 10)
    axis_2.set_ylim(0, 10)

    x=np.array([1,2,3,4])
    y_1=np.array([1,1,1,1])
    y_2=y_1+4
    
    axis_1.plot(x, y_1, picker=5, label='line_1')
    axis_2.plot(x, y_2, picker=5, label='line_2')
    
    fig.canvas.mpl_connect('pick_event', onPick)
    plt.show()

if __name__=='__main__':
    pick()

有没有办法从下面的轴上挑线?

【问题讨论】:

标签: python-3.x matplotlib multiple-axes


【解决方案1】:

不可能。 ^^ 我找到了解决方案。我不从斧头中挑选,我从传说中挑选。
我认为这是一个很好的妥协。

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import rand


def onpick(event):
        print(event.artist.get_label())


if __name__ == '__main__':
    t=np.linspace(1, 10, 100)
    y1, y2=1*t, 2*t
    y3, y4=3*t, 4*t

    fig, ax1=plt.subplots()
    ax2=ax1.twinx()
    ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler # Send Color cycle state to second axis.
    
    line1, = ax1.plot(t, y1, lw=2, label='1 HZ')
    line2, = ax1.plot(t, y2, lw=2, label='2 HZ')
    line3, = ax2.plot(t, y3, lw=2, label='3 HZ')
    line4, = ax2.plot(t, y4, lw=2, label='4 HZ')
    
    leg=ax1.legend(handles=[line1, line2, line3, line4], bbox_to_anchor=(0,1.02,1,0.2), loc="lower left", mode="expand", borderaxespad=0, ncol=3)
    for line in leg.get_lines(): line.set_picker(5)
    
    fig.canvas.mpl_connect('pick_event', onpick)
    plt.show()

【讨论】:

  • 这确实有效。但是由于某种原因,如果我将 bbox_to_anchor 覆盖在图表上,而不是在它之上,那么它就不起作用?更改为bbox_to_anchor=(0,0.95,1,0.2),您会注意到 2Hz 不会触发事件
  • 找到了解决方法。安装在ax1.legend() 我用plt.legend()
猜你喜欢
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多