我有一个python matplotlib图,显示如下。
X轴上有超过100个项目,我想要全部绘制它们,但是只需要大约25个左右(可能是自动的),这样就可以清楚地看到它。
你能帮忙吗?
由于
我的代码如下:
l1 = plt.plot(b)
plt.setp(l1, linewidth=4, color='r')
l2 = plt.plot(c)
plt.setp(l2, linewidth=4, color='k')
l3 = plt.plot(d)
plt.setp(l3, linewidth=4, color='g')
plt.xticks(range(len(a)), a)
plt.xticks(rotation=30)
plt.show()
plt.savefig('a.png')
注意:我还有
形式的数据列a(X轴变量)u' 2016-02-29T00:01:30.000Z CHEPSTLC0007143 CDC-R114-DK'
会抛出此错误invalid literal for float()
。这就是我使用plt.xticks(range(len(a)), a)
的原因。
答案 0 :(得分:2)
这是一个mpl正在按照你所说的去做的情况,但是你告诉它要做的事情有点不方便。
plt.xticks(range(len(a)), a)
告诉mpl在每个整数上打勾,并使用a
中的字符串来标记刻度(它正确地做了)。我认为你想做的事情就像
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
# synthetic data
a = list(range(45))
d = ['the label {}'.format(i) for i in range(45)]
# make figure + axes
fig, ax = plt.subplots(tight_layout=True)
ax.set_xlabel('x label')
ax.set_ylabel('y label')
# draw one line
ln1, = ax.plot(range(45), lw=4, color='r')
# helper function for the formatter
def listifed_formatter(x, pos=None):
try:
return d[int(x)]
except IndexError:
return ''
# make and use the formatter
mt = mticker.FuncFormatter(listifed_formatter)
ax.xaxis.set_major_formatter(mt)
# set the default ticker to only put ticks on the integers
loc = ax.xaxis.get_major_locator()
loc.set_params(integer=True)
# rotate the labels
[lab.set_rotation(30) for lab in ax.get_xticklabels()]
如果您平移/缩放,则标记标记将是正确的,并且mpl将选择合理数量的标记以显示。
[旁注,此输出来自2.x分支并显示一些新的默认样式]
答案 1 :(得分:0)
只需将 plt.xticks(range(len(a)), a)
替换为 plt.xticks(np.arange(0, len(a) + 1, 5))
,您就会减少显示的 x 轴标签的数量。
答案 2 :(得分:0)
如果您只想显示 3 个刻度,请使用以下代码:
axes = plt.axes()
x_values = axes.get_xticks()
y_values = axes.get_yticks()
x_len = len(x_values)
y_len = len(y_values)
print(x_len)
print(y_len)
new_x = [x_values[i] for i in [0, x_len // 2, -1]]
new_y = [y_values[i] for i in [0, y_len // 2, -1]]
axes.set_xticks(new_x)
axes.set_yticks(new_y)
同样,如果您只想显示 25 个刻度,只需从 get_xticks()
中选取等距的 25 个值