Python matplotlib将记号与比例末端对齐
如果我在matplotlib中打印某个内容,它会自行选择y轴上的间距(在此处放置记号)。如何告诉轴始终以完整刻度结束,而不是在两个刻度之间 如果它选择每0.5打勾一次,则末端为2.0,且不高于2.0,且无打勾Python matplotlib将记号与比例末端对齐,python,python-2.7,matplotlib,Python,Python 2.7,Matplotlib,如果我在matplotlib中打印某个内容,它会自行选择y轴上的间距(在此处放置记号)。如何告诉轴始终以完整刻度结束,而不是在两个刻度之间 如果它选择每0.5打勾一次,则末端为2.0,且不高于2.0,且无打勾 import matplotlib.pyplot as plt X = [1,2,3,4,5] y = [0.1,0.3,2.4,3.9,3.2] plt.plot(X, y) plt.show() 较新版本的matplotlib现在默认为绘图添加边距。您可以通过调用plt.marg
import matplotlib.pyplot as plt
X = [1,2,3,4,5]
y = [0.1,0.3,2.4,3.9,3.2]
plt.plot(X, y)
plt.show()
较新版本的matplotlib现在默认为绘图添加边距。您可以通过调用
plt.margins(0,0)
来删除它们:
但是,这会自动生成轴限制。在上面的示例中,这将不包括0或4(因为数据不包括0或4)。因此,您可以自己设置轴限制:
plt.ylim(0, 4)
如果要将限制限制限制在某个范围内,只需使用
plt.xlim
和plt.ylim
。以下是一个例子:
import matplotlib.pyplot as plt
import numpy as np
X = [1,2,3,4,5]
# y = [0.1,0.3,2.4,3.9,3.2]
y = [0.1,0.2,0.3,0.5,1.1]
plt.plot(X, y)
plt.xlim(min(X), max(X))
ticks = [tick for tick in ax.get_yticks()]
plt.ylim(ticks[0], ticks[-1])
# plt.ylim(np.floor(min(y)), np.ceil(max(y))) # If you want only integer upper and lower limits
编辑:这解决了您对以下一组值的担忧X=[1,2,3,4,5]
和y=[0.1,0.2,0.3,0.5,1.1]
默认情况下,您将自动缩放轴,以扩展数据范围的某个百分比 因此,刻度位置和轴限制完全不相关。这主要为图表内容提供了一个良好的视觉外观 但是,您可以决定激活整数自动限制模式
plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
要使限制和刻度相互关联,请执行以下操作:
这里,在打印的数据周围创建了大量空白。您可以决定将边距设置为0
,以避免出现这种情况
plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
plt.rcParams['axes.xmargin'] = 0
plt.rcParams['axes.ymargin'] = 0
请注意,此模式通常会扩展到下一个“nice number”,这可能是所需的,也可能不是所需的。例如,如果让第一个x值略小于1,x=[0.99,2,3,4,5]
限制将扩展到0.5
matplotlib页面上还有一个标签。如果我希望matplotlib以4.0结尾,则可以手动编辑略高于4.0的标签matplotlib作为顶部。但我不想将其设置为4.0,但它应该由matplotlib计算值是多少。我想要4.0,但不是它上面的空间。好的,然后只需添加
plt.ylim(min(y),4)
是,但我不想知道4,所以我可以对每幅图片使用它。在这种情况下,使用plt.ylim(min(y),np.ceil(max(y)))
当matplotlib得出的间距不是整数时是什么?如果我使用边距=0,0。为什么他要删除顶部标签?@user3613886,因为matplotlib将自动生成限制。如果你知道你想要什么限制,你可以自己设定。我已经编辑了我的答案,并给出了一些解释。我如何使用matplotlib得出的间距,并使用它自动设置为0和4,而不明确使用我知道它是4和0?请参阅编辑Bazingaa的答案,将限制设置为最接近的整数
plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
plt.rcParams['axes.xmargin'] = 0
plt.rcParams['axes.ymargin'] = 0