Matplotlib 条形图:对角刻度标签
Posted
技术标签:
【中文标题】Matplotlib 条形图:对角刻度标签【英文标题】:Matplotilb bar chart: diagonal tick labels 【发布时间】:2013-07-23 13:25:23 【问题描述】:我正在使用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()
标签如何对角显示?
【问题讨论】:
【参考方案1】:不用set_xticks
或set_xticklabels
,它们都是officially discouraged,你可以只使用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
【参考方案2】:
文档中的示例使用:
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()
【讨论】:
以上是关于Matplotlib 条形图:对角刻度标签的主要内容,如果未能解决你的问题,请参考以下文章
如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效
Python matplotlib可视化:在Matplotlib中为坐标轴刻度添加自定义符号(例如,货币符号¥$等)水平条形图(horizontal bar)