matplotlib 将刻度线与刻度末端对齐

use*_*886 5 python matplotlib python-2.7

如果我在 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()
Run Code Online (Sandbox Code Playgroud)

Imp*_*est 5

默认情况下,您将获得自动缩放的轴以扩展数据范围的一定百分比。

在此输入图像描述

因此刻度位置和轴限制完全不相关。这主要为图表内容提供了良好的视觉外观。

但是,您可以决定激活整数自动限制模式,

plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
Run Code Online (Sandbox Code Playgroud)

使限制和刻度相互关联:

在此输入图像描述

此处,在绘制的数据周围创建了大量空白。您可以决定将边距设置为0以避免这种情况

plt.rcParams['axes.autolimit_mode'] = 'round_numbers'
plt.rcParams['axes.xmargin'] = 0
plt.rcParams['axes.ymargin'] = 0
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,此模式通常会扩展到下一个“好数字”,这可能是也可能不是所需的。例如,如果您让第一个 x 值略小于 1,X = [0.99,2,3,4,5]则限制将扩展到 0.5

在此输入图像描述

matplotlib 页面上还有一个示例。


She*_*ore 1

如果您想将限制限制在某个范围内,只需使用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
Run Code Online (Sandbox Code Playgroud)

编辑:这解决了您对以下一组值的X = [1,2,3,4,5]担忧 y = [0.1,0.2,0.3,0.5,1.1]

在此输入图像描述