对角线刻度标签

21

我正在使用matplotlib.pyplot在Python中绘制条形图。该图表将包含大量的条形,每个条形都有自己的标签。因此,标签会重叠,不再可读。我希望标签以对角线显示,以便它们不会重叠,就像this图片中一样。

这是我的代码:

import matplotlib.pyplot as plt
N =100
menMeans = range(N)
ind = range(N)  
ticks = ind 
fig = plt.figure()
ax = fig.add_subplot(111)
rects1 = ax.bar(ind, menMeans, align = 'center')
ax.set_xticks(ind)
ax.set_xticklabels( range(N) )
plt.show()

如何将标签以对角线方式显示?

2个回答

37

不要使用 set_xticksset_xticklabels,它们都是被正式不推荐使用的。 相反,您可以使用 rotation 参数来设置 xticks:

plt.xticks(rotation=45, ha="right")

这种方法可以让你指定刻度标签的旋转角度,同时让Matplotlib为你处理它们的频率/间距。请注意,如果您所有的标签都很短(在这种情况下,您可能希望将其删除),则使用ha="right"来右对齐标签文本并不重要,但如果您的标签很长且长度不一,则非常重要--它确保刻度标签的末尾直接位于它标记的刻度下方,并防止标签间距不一致甚至重叠。

一个完整的工作示例,基于问题中的代码:

import matplotlib.pyplot as plt
N =100
menMeans = range(N)
ind = range(N)  
ticks = ind 
fig = plt.figure()
ax = fig.add_subplot(111)
rects1 = ax.bar(ind, menMeans, align = 'center')
plt.xticks(rotation=45, ha="right")
plt.show()

输出:

带有旋转标签的图表


应该补充说明 ax.bar 现在可以接受 tick_label 参数。 - information_interchange
非常感谢这个。一行上有大约30个标签,这清理了所有的混乱! - Michael Hearn

12

文档中的示例使用:

plt.setp(xtickNames, rotation=45, fontsize=8)

所以在你的情况下,我认为:ax.set_ticklabels(range(N), rotation=45, fontsize=8)可以给出角度,但它们仍然重叠。所以尝试:

ax.set_ticklabels(range(N)) plt.setp(ax.get_xticklabels(), rotation=45, fontsize=8)
import matplotlib.pyplot as plt
N =100
menMeans = range(N)
ind = range(N)  
ticks = ind 
fig = plt.figure()
ax = fig.add_subplot(111)
rects1 = ax.bar(ind, menMeans, align = 'center')
ax.set_xticks(range(0,N,10))
ax.set_xticklabels( range(0,N,10), rotation=45 )
plt.show()

在这里输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接