旋转解决方案here和/或here适用于所有长度相似的标签。但是,位置似乎基于标签的中间位置,因此如果标签名称长度不均匀,间距就会关闭。matplotlib和/或seaborn中旋转轴标签的均匀间距
以下代码导致不均匀间距的外观。
frame = pd.DataFrame(np.random.random((10, 4)), columns=[
'Medium Name', 'Really Really Long Name', 'Name',
'Ridiculously Good Looking and Long Name'
])
ax = sns.barplot(data=frame)
plt.xticks(rotation=45)
我试图调整间距类似this question,但它是一个恼人的手工工艺猜测得到它看的权利。添加行ax.axes.set_xticks([-0.2,0.6,2,2.3])
粗略地创建了我认为合适的间距(列中心的字符串末尾),但是是否存在基于标签尾部而不是中间的自动方式?或者,也许包装的字符串,所有标签是相同的长度?
编辑: 要显示什么都有可能发生,即使是合理的长度的标签:
cols = ['Tag' + str(i) for i in range(8)]
cols[2] = 'Not Crazy Long'
cols[4] = 'Also Not Too Bad'
frame = pd.DataFrame(np.random.random((10, 8)), columns=cols)
ax = sns.barplot(data=frame)
plt.xticks(rotation=35)
我喜欢的文本换行的解决方案,但@mwaskom指出,我想我真的想标签的“向右水平对齐”(即使使用文本包装)。这可能吗?
的问题不在于间距不均匀,但水平具有水平居中对齐。你想要一个向右的水平线,我想。顺便说一句,对于长条形标签的条形图来说,绘制水平条通常会更好,因为即使排列正确时,也不得不倾斜头部以读取长条形标签。 – mwaskom
PPS这不是一个“在seaborn”问题 - 在你指定刻度标签的方向/对齐的地方,这是一个关于matplotlib的问题,以及这个情节是否是用seaborn制作的是无关紧要的。 – mwaskom
谢谢@mwaskom,我看到你关于横向barplot和seaborn问题的观点 - 尽管我希望有一种方法可以在seaborn中实现,因为它比直接处理matplotlib好得多:) – elphz