【问题标题】:setting y-axis limit in matplotlib在 matplotlib 中设置 y 轴限制
【发布时间】:2011-04-16 05:24:59
【问题描述】:

我需要帮助来设置 matplotlib 上的 y 轴限制。这是我尝试过的代码,但没有成功。

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

根据我为该图提供的数据,我得到 20 和 200 的 y 轴限制。但是,我想要限制 20 和 250。

【问题讨论】:

  • 如果我在最后添加 plt.show() 以显示情节,则适用于 Matplotlib 1.0.0。您使用的是哪个版本和哪个后端?
  • 使用 Matplotlib 0.98.5.2、Python 2.6.2 为我工作。我尝试了plt.ylim((25,250))plt.ylim(ymax = 250, ymin = 25)。我正在使用Agg 后端。
  • 感谢你们俩。它是否适用于您的 PDF 后端。
  • 注意:axisbg 现已弃用
  • plt.ylim 是解决此问题的正确现代解决方案。这是一个很好的资源:@​​987654321@

标签: python matplotlib


【解决方案1】:

通过plt.gca()获取当前坐标轴,然后设置其限制:

ax = plt.gca()
ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])

【讨论】:

  • 顺便说一句,这是一个愚蠢的缩写,意思是“get the current axes”。
  • 您还可以设置一个值None,将计算留给matplotlib,例如axes.set_ylim([ymin,None])
  • 还有其他选项,而不是使用@linqu 的帖子中的Noneset_ylim(bottom=None, top=None, [...], *, ymin=None, ymax=None)bottomymin(等效)至少。 topymax) 最大等效。您不能同时使用bottomymin。与topymax 相同。
【解决方案2】:

另一种解决方法是获取绘图的轴并重新分配仅更改 y 值:

x1,x2,y1,y2 = plt.axis()  
plt.axis((x1,x2,25,250))

【讨论】:

  • 你不需要抓住x1x2,你可以让matplotlib用None推断这些。
【解决方案3】:

您可以做的一件事是使用 matplotlib.pyplot.axis 自行设置轴范围。

ma​​tplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0,10 用于 x 轴范围。 0,20 用于 y 轴范围。

或者你也可以使用 matplotlib.pyplot.xlim 或 matplotlib.pyplot.ylim

ma​​tplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)

【讨论】:

    【解决方案4】:

    您可以从matplotlib.pyplot.axes 实例化一个对象并在其上调用set_ylim()。应该是这样的:

    import matplotlib.pyplot as plt
    axes = plt.axes()
    axes.set_ylim([0, 1])
    

    【讨论】:

      【解决方案5】:

      只是为了微调。如果只想设置轴的一个边界,而让另一个边界不变,可以选择以下一种或多种语句

      plt.xlim(right=xmax) #xmax is your value
      plt.xlim(left=xmin) #xmin is your value
      plt.ylim(top=ymax) #ymax is your value
      plt.ylim(bottom=ymin) #ymin is your value
      

      查看xlimylim 的文档

      【讨论】:

        【解决方案6】:

        这至少在 matplotlib 2.2.2 版中有效:

        plt.axis([None, None, 0, 100])
        

        这可能是一种很好的设置方式,例如仅设置 xmin 和 ymax 等。

        【讨论】:

          【解决方案7】:

          要添加到@Hima 的答案,如果您想修改当前的 x 或 y 限制,您可以使用以下内容。

          import numpy as np # you probably alredy do this so no extra overhead
          fig, axes = plt.subplot()
          axes.plot(data[:,0], data[:,1])
          xlim = axes.get_xlim()
          # example of how to zoomout by a factor of 0.1
          factor = 0.1 
          new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
          axes.set_xlim(new_xlim)
          

          当我想从默认绘图设置中缩小或放大一点时,我发现这特别有用。

          【讨论】:

            【解决方案8】:

            这应该可行。你的代码对我有用,比如 Tamás 和 Manoj Govindan。看起来你可以尝试更新 Matplotlib。如果您无法更新 Matplotlib(例如,如果您没有足够的管理权限),也许使用带有 matplotlib.use() 的不同后端可能会有所帮助。

            【讨论】:

            • 感谢您的检查!我正在使用 pdf 后端 (matplotlib.use('PDF'))。我正在使用最新版本的 Enthought Python Distribution 附带的版本。你能看看它是否适用于PDF后端。谢谢!
            • 它确实适用于 Mac OS X 上的 PDF 后端。您确定输出文件确实更新为 plt.savefig()
            • 我想我意识到了这个问题。如果我在plt.subplot 行中取出aPlot =,它也适用于我。似乎如果将子图分配给这样的变量,则必须使用其他一些设置轴限制的方法。这是真的吗?
            • 据我所知,plt.ylim() 将限制应用于当前轴,这些限制是在您执行plt.subplot() 时设置的。我也不敢相信plt.subplot() 关心它返回的轴的使用方式(是否放入变量等)。所以我会说它应该工作;它确实在我的机器上工作。
            猜你喜欢
            • 1970-01-01
            • 2012-04-22
            • 1970-01-01
            • 2020-06-30
            相关资源
            最近更新 更多