Matplotlib - 使用scatter()时pyplot错误地设置轴刻度

时间:2018-01-22 23:43:50

标签: python matplotlib axis-labels

我正在尝试使用下面的简单代码自定义散点图的xticks和yticks:

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

y_ticks = np.arange(10, 41, 10)
x_ticks = np.arange(1000, 5001, 1000)

ax.set_yticks(y_ticks)
ax.set_xticks(x_ticks)

ax.scatter(some_x, some_y)

plt.show()

如果我们注释掉这一行:ax.scatter(x, y),我们会得到一个带有正确结果的空图:

enter image description here

但是,如果代码完全如图所示运行,我们会得到:

enter image description here

最后,如果我们运行代码ax.set_yticks(yticks)ax.set_xticks(xticks)注释掉,我们也会得到正确的结果(只是轴不在我想要的范围内)是):

enter image description here

请注意,我使用的是Python 2.7版。此外,省略some_xsome_y

在我尝试绘制散点图之后,任何有关轴为何以这种奇怪方式发生变化的输入都将受到赞赏。

编辑:

如果我在设置ax.scatter(x, y)xticks之前运行yticks,我会得到与之前略有不同的奇怪结果:

enter image description here

1 个答案:

答案 0 :(得分:2)

Matplotlib轴将始终根据内容进行调整。这是一个理想的功能,因为它允许始终查看绘制的数据,无论它的范围是-10到-9还是1000到10000.

设置xticks只会更改刻度线位置。因此,如果您将刻度设置为介于-10和-9之间的位置,但随后将数据从1000设置为10000,则根本看不到任何刻度,因为它们不在所示范围内。

如果自动选择的限制不是您要查找的限制,则需要使用ax.set_xlim()ax.set_ylim()手动设置限制。

最后应该清楚的是,为了在轴上显示正确的数字,您需要实际使用数字。如果some_x中的some_yax.scatter(some_x, some_y)是字符串,则它们将不遵守任何合理的限制,而只是一个接一个地绘制。