如何在 Matplotlib 中设置轴限制?

2024-12-09 08:30:00
admin
原创
149
摘要:问题描述:我需要帮助来设置 matplotlib 上 y 轴的限制。这是我尝试过的代码,但没有成功。import matplotlib.pyplot as plt plt.figure(1, figsize = (8.5,11)) plt.suptitle('plot title') ax = [] aPl...

问题描述:

我需要帮助来设置 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))

根据我为此图提供的数据,我得到 y 轴的限制为 20 和 200。但是,我希望限制为 20 和 250。


解决方案 1:

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

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

解决方案 2:

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

matplotlib.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

matplotlib.pyplot.ylim

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

解决方案 3:

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

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

解决方案 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

查看xlim和ylim的文档

解决方案 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()可能会有所帮助。

解决方案 9:

我们可以使用plt.xlim()plt.ylim()

查看下面的代码以正确理解它。

x = np.array([1,2,5,4,8])
fig = plt.figure(figsize=(5,5))

plt.plot(x,x**2, label='Square', marker='*')
plt.plot(x,x**3, label='Cube', marker='o')
plt.xlim(1,20)
plt.ylim(1,600)
plt.legend()
plt.show()

输出如下图所示。

输出

解决方案 10:

ylim可以使用 进行设置Axes.set()。事实上,可以通过 设置大量属性set(),例如刻度、刻度标签、标签、标题等(这些属性在 OP 中单独设置)。

ax = plt.gca()
ax.set(ylim=(20, 250), xlim=(0, 100))

再次,ylim(和其他属性)也可以在实例中设置plt.subplot。对于 OP 中的情况,这将是

aPlot = plt.subplot(321, facecolor='w', title="Year 1", ylim=(20,250), xticks=paramValues, ylabel='Average Price', xlabel='Mark-up')
#                                                       ^^^^  <---- ylim here
plt.plot(paramValues, plotDataPrice[0], color='#340B8C', marker='o', ms=5, mfc='#EB1717');

要设置ylim多个子图(和其他属性),请使用plt.setp。例如,如果我们在 OP 的代码中包含另外 2 个子图,并且如果我们想为所有子图设置相同的属性,一种方法如下:

import matplotlib.pyplot as plt
import random

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
paramValues = range(10)
for i in range(1, 4):
    aPlot = plt.subplot(3,2,i, title=f"Year {i}")
    ax.append(aPlot)
    aPlot.plot(paramValues, [random.randint(20,200) for _ in paramValues], color='#340B8C', marker='o', ms=5, mfc='#EB1717')
    aPlot.grid(True);

plt.setp(ax, ylim=(20,250), facecolor='w', xticks=paramValues, ylabel='Average Price', xlabel='Mark-up')
#            ^^^^  <---- ylim here
plt.tight_layout();
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用