请问有没有快速的方法可以在放大后跟踪我的图形边界限制呢?我想要精确地知道坐标,这样我就可以使用ax.set_xlim
和ax.set_ylim
来再现图形。我正在使用标准的qt4agg后端。
编辑:我知道我可以使用光标找到左下角和右上角的两个位置,但也许有正式的方法可以做到这一点吗?
请问有没有快速的方法可以在放大后跟踪我的图形边界限制呢?我想要精确地知道坐标,这样我就可以使用ax.set_xlim
和ax.set_ylim
来再现图形。我正在使用标准的qt4agg后端。
编辑:我知道我可以使用光标找到左下角和右上角的两个位置,但也许有正式的方法可以做到这一点吗?
matplotlib有一个事件处理API,您可以使用它来钩入到像您所提到的那些操作中。 事件处理 页面概述了事件API,并且在Axes 页面中简要介绍了x和y轴限制事件。
Axes
实例支持通过回调属性进行回调,该属性是CallbackRegistry
实例。你可以连接到的事件是xlim_changed
和ylim_changed
,回调将通过func(ax)
调用,其中ax
是Axes
实例。
在您的情况下,您需要在Axes
对象的xlim_changed
和ylim_changed
事件上注册回调函数。每当用户缩放或移动视口时,这些函数将被调用。
这是一个最小化的工作示例:
Python 2
import matplotlib.pyplot as plt
#
# Some toy data
x_seq = [x / 100.0 for x in xrange(1, 100)]
y_seq = [x**2 for x in x_seq]
#
# Scatter plot
fig, ax = plt.subplots(1, 1)
ax.scatter(x_seq, y_seq)
#
# Declare and register callbacks
def on_xlims_change(event_ax):
print "updated xlims: ", event_ax.get_xlim()
def on_ylims_change(event_ax):
print "updated ylims: ", event_ax.get_ylim()
ax.callbacks.connect('xlim_changed', on_xlims_change)
ax.callbacks.connect('ylim_changed', on_ylims_change)
#
# Show
plt.show()
Python 3
import matplotlib.pyplot as plt
#
# Some toy data
x_seq = [x / 100.0 for x in range(1, 100)]
y_seq = [x**2 for x in x_seq]
#
# Scatter plot
fig, ax = plt.subplots(1, 1)
ax.scatter(x_seq, y_seq)
#
# Declare and register callbacks
def on_xlims_change(event_ax):
print("updated xlims: ", event_ax.get_xlim())
def on_ylims_change(event_ax):
print("updated ylims: ", event_ax.get_ylim())
ax.callbacks.connect('xlim_changed', on_xlims_change)
ax.callbacks.connect('ylim_changed', on_ylims_change)
#
# Show
plt.show()
axes
没有被定义;它需要是ax.get_xlim()
- 我编辑了答案。 - ImportanceOfBeingErnestprint ax.get_xlim(), ax.get_ylim()
.get_xlim
。 - EL_DONax.get_xlim()
会在任何时候返回绘图的当前限制,即使在缩放后也是如此。因此,如果能够与图形进行交互并以交互方式调用此类命令,例如在IPython会话中,这将正常工作。如果绘图是由脚本生成的,则通常没有此选项;在这种情况下,另一个答案显示了如何使用所需的事件以便能够打印出限制。 - ImportanceOfBeingErnest
ax.get_xlim
和ax.set_ylim
来检索限制。 - hitzg