如何让matplotlib显示所有的x坐标?

yftpprvb  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(161)

例如,在下面的代码中:

import numpy as np
import matplotlib.pyplot as plt

N = 10
x = [1,2,3,4,5,6,7,8,9,10]
y = np.random.rand(N)

plt.scatter(x, y)
plt.show()

我得到了下面的图

如你所见,在x轴中,只有偶数值出现,如何强制matplotlib显示所有值,即1 2 3 4 5 6 7 8 9 10

ogq8wdun

ogq8wdun1#

使用plt.xticks(x)。请参阅文档。
注意,只使用刻度的输入值通常会让查看者感到困惑。使用均匀间隔的刻度更有意义。

gev0vcfq

gev0vcfq2#

使用非均匀分布的值设置xticks有时会导致“错误”绘图。例如,在以下情况下:

x = [1,2.9,3.1,4,5,6,7,8,9,10]
y = np.random.rand(10)

plt.scatter(x, y)
plt.xticks(x);

x-tick标签在某些点不可读。

刻度标签最好均匀分布:

plt.scatter(x, y)
plt.xticks(range(min(x), max(x)+1));

仅供参考,您可以通过调用plt.xlim()plt.ylim()来获取轴的限制,以便设置更准确的刻度标签。此外,使用plt.xticks()(和plt.yticks()),您可以设置任意刻度标签。例如,刻度标签可以是字符串(如abc),而不是数字。

plt.scatter(x, y)
plt.xticks(range(min(x), max(x)+1));
ymin, ymax = plt.ylim()   # (0.19667230980587072, 1.0097016485006163)
plt.yticks(np.linspace(0, 1, 4), ['0', 'a', 'b', 'c']);
plt.ylim(ymin, ymax);

通过显式创建子图并设置Axes对象的属性,可以绘制完全相同的图形。

fig, ax = plt.subplots(figsize=(5,2))
ax.scatter(x, y)
ax.set(xticks=np.arange(min(x), max(x)+1), yticks=np.linspace(0, 1, 4), yticklabels=['0', 'a', 'b', 'c'], ylim=ax.get_ylim());

相关问题