我希望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()
输出未显示所有刻度线标签
当我使用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()
输出
答案 0 :(得分:2)
问题在于您的数据由字符串组成。相应地,轴标签更像是类别,因为matplotlib
不会根据字符串的值(如果将它们转换为整数)来比较字符串。考虑以下代码:
import matplotlib.pyplot as plt
y = ['1', '2', '3', '50']
x = ['1', '2', '3', '-200']
plt.plot(x,y)
这将产生以下情节:
如果您修改数据类型,则不会遇到此问题。
也就是说,您可能需要考虑使用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))