我有一个包含许多补丁的现有情节(轴)。我希望在现有轴中添加一些按钮。如果我编写以下代码,它会将整个轴作为按钮,即在轴上的任何位置都会检测到单击。
# 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定位在现有轴上?
答案 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%。
或者,您可以使用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%。