当前位置: 首页 > 面试题库 >

Matplotlib:缩放后找出xlim和ylim

朱浩大
2023-03-14
问题内容

您肯定知道一种快速方法,在放大后如何追踪图形的极限?我想精确地知道坐标,以便可以使用ax.set_xlim和复制图形ax.set_ylim。我正在使用标准的qt4agg后端。

编辑:我知道我可以使用光标找出上下角处的两个位置,但是也许有正式的方法可以做到这一点?


问题答案:

matplotlib有一个事件处理API,您可以使用它来挂接您所指代的操作。“事件处理”页面提供了事件API的概述,并且在“轴”页面上(非常)简短地提到了x和y极限事件。

Axes实例通过作为实例的callbacks属性支持回调CallbackRegistry。您可以连接的事件为xlim_changedylim_changed并且回调将在实例func(ax)所在的位置调用ax``Axes

在您的方案中,您想在Axes对象的xlim_changedylim_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()


 类似资料:
  • 问题内容: 我正在使用matplotlib在Python中绘制数据。我正在基于一些计算更新图的数据,并希望ylim和xlim自动重新缩放。取而代之的是,比例是根据初始图的限制设置的。MWE是 第一个plot命令从中生成一个图,我可以看到一切正常。最后,y-data数组的起始位置大于,但该图的y限制仍然存在。 我知道我可以使用手动更改限制,但是我不知道将其更改为什么。在循环中,我可以告诉pyplot

  • 问题内容: 我需要使用matplotlib获取一个自动拟合数据的图。这是我得到的代码: 这样就创建了一个图,但是无论数据是什么,窗口都始终是相同的(0-〜.8),即使所有数据都在该窗口之外。生成的窗口无法放大,只能放大,因此这是一个主要问题。我找不到在任何地方设置任何类型的大小设置的地方,II也找不到关于默认值的详细信息。我需要一个窗口来自动拟合数据,但是我找不到能执行此操作的任何函数(由于某些原

  • 问题内容: 我需要实现变焦为包含在。我已经通过覆盖方法和调用来成功进行缩放。 这是不正常:对的和的规模如预期,但一定会得到的和这样的寄存器在预分频的位置。我能做什么?感谢您的阅读。 问题答案: 显示了如何使用明确的转化方法扩展鼠标坐标:,,和。)。

  • 问题内容: 我只想绘制数组的一部分,固定x部分,但让y部分自动缩放。我尝试如下所示,但它不起作用。 有什么建议? 问题答案: 自动缩放总是使用整个数据范围,因此y轴将按y数据的全部范围缩放,而不仅仅是x范围内的缩放。 如果要显示数据的子集,那么仅绘制该子集可能是最简单的:

  • 问题内容: 我使用matplotib的Axes API绘制了一些数字。我画的线之一代表理论上的预期线。它没有原始y和x限制的含义。我想要的是让matlplotlib在自动缩放限制时忽略它。我以前要做的是检查当前极限,然后绘制并重置极限。问题在于,当我绘制第三张图时,将与理论线一起重新计算极限值,这实际上扩展了图。 问题答案: 显而易见的方法是手动将限制设置为所需的值。(例如) 如果您不想手动查找限

  • 问题内容: 我有一个JFreeChart时间序列图,其中显示了TimePeriodValuesCollection。数据集包含两个间隔。数据正确显示,我可以平移(按住Ctrl并拖动)视图。问题是,如果我放大并在缩放视图中向右平移视图,则第二个间隔在第一个间隔不再可见后突然消失。 如果只有一个时间间隔,或者我没有放大,一切都很好。 有什么想法吗? SSCCE: 问题答案: 可悲的是,我不知道为什么,