plt.yticks不显示所有y刻度标签

时间:2019-04-15 04:57:39

标签: python matplotlib

我希望y轴显示从0到40的y-ticks标签,并且步长为2。

但是当我使用plt.yticks(np.arange(0,40,step=2))时,情节是莫名其妙的。它不会显示所有刻度线标签,并且范围不正确!

如何解决这个问题。

抽象代码

import matplotlib.pyplot as plt
import numpy as np

y = ['15.0','14.0','13.0','12.0']
x = ['1','2','3','4']

plt.plot(x,y)
plt.yticks(np.arange(0,40,step=2))
plt.show()

输出未显示所有刻度线标签

dont show all the tick label

当我使用set_yticklabels添加所有刻度线标签时 输出未显示实际值

代码

import matplotlib.pyplot as plt
import numpy as np

y = ['15.0','14.0','13.0','12.0']
x = ['1','2','3','4']

plt.plot(x,y)
plt.yticks(np.arange(0,40,step=2))
plt.gca().set_yticklabels(np.arange(0,40,step=2))
plt.show()

输出

enter image description here

1 个答案:

答案 0 :(得分:2)

问题在于您的数据由字符串组成。相应地,轴标签更像是类别,因为matplotlib不会根据字符串的值(如果将它们转换为整数)来比较字符串。考虑以下代码:

import matplotlib.pyplot as plt

y = ['1', '2', '3', '50']
x = ['1', '2', '3', '-200']

plt.plot(x,y)

这将产生以下情节:

enter image description here

如果您修改数据类型,则不会遇到此问题。

也就是说,您可能需要考虑使用matplotlib.ticker中的刻度定位器,而不是手动设置刻度范围。一个例子:

x = [1, 3, 8, 20]
y = [1, 2, 3, 4]

plt.plot(x, y)
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(3.5))

enter image description here