按钮在轴上的定位(matplotlib)

时间:2017-11-25 19:45:02

标签: python matplotlib

我有一个包含许多补丁的现有情节(轴)。我希望在现有轴中添加一些按钮。如果我编写以下代码,它会将整个轴作为按钮,即在轴上的任何位置都会检测到单击。

# ax is the reference to axes containing many patches
bSend = Button(ax, 'send')
bSend.on_clicked(fu)

matplotlib给出的example不使用现有轴但使用新轴(?)

# Create axes
axprev = plt.axes([0.7, 0.05, 0.1, 0.075])
axnext = plt.axes([0.81, 0.05, 0.1, 0.075])

# Make Buttons of those axes.
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)

有没有办法可以将Button定位在现有轴上?

1 个答案:

答案 0 :(得分:2)

matplotlib.widgets.Button位于自己的轴上,您需要通过第一个参数提供。所以你需要在某处创建一个轴。

根据您要实现的目标,您可以选择轴内的坐标

button_ax = plt.axes([0.4, 0.5, 0.2, 0.075])  #posx, posy, width, height
Button(button_ax, 'Click me')

此处的坐标以图形宽度和高度为单位。因此按钮将以图形宽度的40%,图形高度的50%创建,宽度为20%,高度为7.5%。

enter image description here

或者,您可以使用InsetPosition将按钮轴相对于子图轴放置。

import matplotlib.pyplot as plt
from  matplotlib.widgets import Button
from mpl_toolkits.axes_grid1.inset_locator import InsetPosition

fig, ax= plt.subplots()

button_ax = plt.axes([0, 0, 1, 1])
ip = InsetPosition(ax, [0.4, 0.5, 0.2, 0.1]) #posx, posy, width, height
button_ax.set_axes_locator(ip)
Button(button_ax, 'Click me')

plt.show()

此处,按钮位于轴宽度的40%和高度的50%,轴宽度的20%和高度的8%。

enter image description here