Pyplot - 限制 x 轴后重新缩放 y 轴

发布于 2024-12-10 04:45:29 字数 287 浏览 0 评论 0原文

我正在尝试使用 pyplot 绘制一些数据,然后使用 xlim() x 轴“放大”。然而,当我这样做时,新图不会重新调整 y 轴 - 我做错了什么吗?

示例 - 在此代码中,绘图 y 轴范围仍取最大值 20,而不是 10。:

from pylab import *

x = range(20)
y = range(20)

xlim(0,10)
autoscale(enable=True, axis='y', tight=None)
scatter(x,y)
show()
close()

I'm trying to plot some data using pyplot, and then 'zoom in' by using xlim() the x axis. However, the new plot doesn't rescale the y axis when I do this - am I doing something wrong?

Example - in this code, the plot y-axis range still takes a maximum of 20, rather than 10.:

from pylab import *

x = range(20)
y = range(20)

xlim(0,10)
autoscale(enable=True, axis='y', tight=None)
scatter(x,y)
show()
close()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我的鱼塘能养鲲 2024-12-17 04:45:29

意识到这是一个古老的问题,但这就是我(混乱地)解决这个问题的方法:

  1. 使用 .plot() 而不是 .scatter()
  2. 访问绘图数据稍后(即使在某处返回图形之后)使用 ax.get_lines()[0].get_xydata()
  3. 使用该数据将 y 轴重新缩放为 xlims

片段应该可以工作:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

x = range(20)
y = range(20)

xlims = [0, 10]

ax.set_xlim(xlims)
ax.plot(x, y, marker='.', ls='')

# pull plot data
data = ax.get_lines()[0].get_xydata()

# cut out data in xlims window
data = data[np.logical_and(data[:, 0] >= xlims[0], data[:, 0] <= xlims[1])]

# rescale y
ax.set_ylim(np.min(data[:, 1]), np.max(data[:, 1]))

plt.show()

Realize this is an ancient question, but this is how I've (messily) gotten around the issue:

  1. use .plot() instead of .scatter()
  2. access plot data later (even after a figure is returned somewhere) with ax.get_lines()[0].get_xydata()
  3. use that data to rescale y axis to xlims

Snippet should work:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

x = range(20)
y = range(20)

xlims = [0, 10]

ax.set_xlim(xlims)
ax.plot(x, y, marker='.', ls='')

# pull plot data
data = ax.get_lines()[0].get_xydata()

# cut out data in xlims window
data = data[np.logical_and(data[:, 0] >= xlims[0], data[:, 0] <= xlims[1])]

# rescale y
ax.set_ylim(np.min(data[:, 1]), np.max(data[:, 1]))

plt.show()
温柔戏命师 2024-12-17 04:45:29

我不知道,尽管你可以尝试手动过滤点

scatter([(a,b) for a,b in zip(x,y) if a>0 and a<10])

I don't know, though you could try manually filtering the points with

scatter([(a,b) for a,b in zip(x,y) if a>0 and a<10])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文