带有垂直 y 轴刻度标签的柱状图

95
我正在使用matplotlib生成一个(垂直)条形图。问题是我的标签相当长。有没有办法将它们垂直显示,无论是在条形图内部还是上方或下方?
4个回答

114

你的意思是这样吗:

>>> from matplotlib import *
>>> plot(xrange(10))
>>> yticks(xrange(10), rotation='vertical')

通常,在matplotlib中以垂直方向显示任何文本,您可以添加关键字rotation='vertical'

如需更多选项,请查看help(matplotlib.pyplot.text)。

yticks函数绘制y轴上的刻度;我不确定您最初是否指的是这个函数还是ylabel函数,但流程始终相同,您必须添加rotation='vertical'

也许您还可以找到有用的选项'verticalalignment'和'horizontalalignment',它们允许您定义如何将文本与刻度或其他元素对齐。


请注意,我没有使用plot()函数,而是使用bar()函数。但是rotation='vertical'似乎是关键。然而,这仍然无法在条形图中绘制刻度线。 - phihag
你是指xy轴上的刻度吗?看一下grid函数。例如,grid(ls='', marker='v')。grid()控制xy轴上网格的绘制;使用marker选项定义刻度标记的样式,并使用ls=''获取不可见网格。 - dalloliogm
除非有更好的答案,否则你将得到赏金,我保证。不过我要到2009年8月9日之前没有互联网接入了:( - phihag
2
谢谢!然而,500个积分或许对于这样的答案来说有点太多了,它并不是那么难。所以如果你愿意的话,可以把这些积分留到下次再用 :) - dalloliogm
我该如何为现有的自动生成的刻度标签执行此操作? - EL_DON

67

在Jupyter Notebook中,您可能会使用类似以下的内容:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np

plt.xticks(rotation='vertical')
plt.plot(np.random.randn(100).cumsum())

或者您可以使用:

plt.xticks(rotation=90)

我认为这是与plt.bar()一起使用的那个,这也是OP所要求的。 - Zhuokai Zhao

26
请查看此链接:https://python-graph-gallery.com/7-custom-barplot-layout/
import matplotlib.pyplot as plt

heights = [10, 20, 15]
bars = ['A_long', 'B_long', 'C_long']
y_pos = range(len(bars))
plt.bar(y_pos, heights)
# Rotation of the bars names
plt.xticks(y_pos, bars, rotation=90)
结果将会像这样 enter image description here 希望有所帮助。

有没有一种方法可以将标签以角度放置,例如对角线。 - Nguai al
1
嗨,Nguai al,你可以简单地更改最后一行中的“rotation”参数为任何你喜欢的角度。例如,plt.xticks(y_pos, bars, rotation=45)将给你一个45度的x标签。 - Yunzhao Xing

6

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