首页 > 解决方案 > 刻度标签周围的填充

问题描述

我正在做一个条形图。

sns_plot = sns.barplot(years, yields, ax=axes[0, 0])
sns_plot.set_xticklabels(years, rotation=90)
sns_plot.xaxis.set_tick_params(pad=10)

但是文字太啰嗦了。即需要标签之间的分离。我怎样才能做到这一点?pad=10似乎从轴上推标签,而不是单独的标签。

在标签垂直(90 度)之后,它们仍然有点聚拢。我想找到合适的杠杆来拉...

标签: matplotlibseaborn

解决方案


测试数据:

In [1]:
import numpy as np
import re

x = """Lorem ipsum dolor sit amet, consectetur adipiscing 
elit, sed do eiusmod tempor incididunt ut labore et dolore 
magna aliqua. Cras nibh turpis, ullamcorper ac lectus vel, 
aliquet consectetur odio. Cras vel scelerisque tortor. 
Interdum et malesuada fames ac ante ipsum primis in faucibus. 
Proin id dignissim ante, a dictum ipsum. Fusce at lacus ac purus 
pulvinar dignissim eget a quam. Sed quis mollis ligula, sed 
ullamcorper velit. Curabitur vel congue metus. Ut placerat 
ipsum non leo posuere, non vestibulum eros posuere. 
Donec eu viverra augue, sit amet tempus ex. Vivamus 
sit amet tempus ipsum. Fusce consequat, augue a mollis 
hendrerit, quam neque dapibus ligula, vitae blandit ipsum 
lorem eu mauris. """
x = pd.Series(x.split(' '))
x = x.apply(lambda x: re.sub('\W+', '', x))
y = np.random.randn(x.shape[0])

df = pd.DataFrame({'X': x, 'Y': y})
df.head()


Out [1]:
    X   Y
0   Lorem   -0.562246
1   ipsum   1.085094
2   dolor   1.044887
3   sit     -1.424002
4   amet    -0.87682

测试图:

In [2]:
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, 1, figsize=(9, 6))
ax.plot(df.X, df.Y, 'ks')
ax.tick_params(axis='x', rotation=90)

Out [2]:

因此,要总结对原始帖子的评论,有多种方法可以删除杂乱的刻度标签,您有多种选择:

1) 较小的标签文本:ax.tick_params(axis='x', labelsize=6) 在此处输入图像描述

2)更少的标签:

for label in ax.xaxis.get_ticklabels()[::2]:
    label.set_visible(False)

在此处输入图像描述

3)更长的轴:fig.set_size_inches((15, 4)) 在此处输入图像描述 等等......


推荐阅读