Matplotilb条形图:对角刻度标签

Mar*_*rco 9 python charts matplotlib bar-chart

我正在使用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()
Run Code Online (Sandbox Code Playgroud)

标签如何以对角线显示?

Mar*_*ery 11

而不是使用set_xticksset_xticklabels,这两者都是正式气馁,你可以使用rotation参数xticks:

plt.xticks(rotation=45, ha="right")
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以指定刻度标签的旋转,同时让matplotlib为您处理它们的频率/间距.

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

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()
Run Code Online (Sandbox Code Playgroud)

输出:

带旋转标签的图形


Ste*_*nes 10

文档中的示例使用:

plt.setp(xtickNames, rotation=45, fontsize=8)
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下我会想: 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述