【发布时间】:2011-05-24 16:52:13
【问题描述】:
我想在 matplotlib 中使用 pyplot 绘制一组点,但没有一个点位于我的轴边缘。自动缩放(或其他东西)设置xlim 和ylim 使得第一个和最后一个点通常位于x = xmin 或xmax 使得在某些情况下难以阅读。
这对于loglog() 或semilog() 绘图更常见,因为自动缩放希望xmin 和xmax 精确到十的幂,但如果我的数据仅包含三个点,例如在xdata = [10**2,10**3,10**4],那么第一个和最后一个点将位于绘图的边界上。
尝试的解决方法
这是我在图表的任一侧添加 10% 缓冲区的解决方案。但是有没有办法更优雅或自动地做到这一点?
from numpy import array, log10
from matplotlib.pyplot import *
xdata = array([10**2,10**3,10**4])
ydata = xdata**2
figure()
loglog(xdata,ydata,'.')
xmin,xmax = xlim()
xbuff = 0.1*log10(xmax/xmin)
xlim(xmin*10**(-xbuff),xmax*10**(xbuff))
我希望有一个单行或两行的解决方案,每当我制作这样的情节时,我都可以轻松使用它。
线性图
为了明确我在解决方法中所做的事情,我应该在线性空间(而不是日志空间)中添加一个示例:
plot(xdata,ydata)
xmin,xmax = xlim()
xbuff = 0.1*(xmax-xmin)
xlim(xmin-xbuff,xmax+xbuff))
这与前面的示例相同,但用于线性轴。
限制太大
一个相关的问题是有时限制太大。假设我的数据类似于ydata = xdata**0.25,因此该范围内的方差远小于十年,但恰好以10**1 结束。然后,自动缩放 ylim 为 10**0 到 10**1,尽管数据仅位于绘图的顶部。使用上面的解决方法,我可以增加 ymax 以便第三点完全在限制范围内,但我不知道如何增加 ymin 以便下部的空格更少我的情节。即,关键是我并不总是想将我的限制分开,而是希望在我的所有点周围有一些恒定(或成比例)的缓冲区。
【问题讨论】:
标签: limit matplotlib