17

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

这是我的代码:

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()

标签如何对角显示?

4

2 回答 2

30

而不是使用set_xticksor set_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()

输出:

带有旋转标签的图形

于 2018-01-28T19:01:16.583 回答
12

文档中的示例使用:

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

所以在你的情况下,我会认为: ax.set_ticklabels(range(N), 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()

在此处输入图像描述

于 2013-07-24T07:58:20.710 回答