如何防止sns.countplot中重叠的x轴标签

wil*_*007 27 python matplotlib pandas seaborn

对于情节

sns.countplot(x="HostRamSize",data=df)
Run Code Online (Sandbox Code Playgroud)

我将下面的图表与x轴标签混合在一起,我该如何避免这种情况?我应该更改图表的大小来解决这个问题吗?

在此输入图像描述

Imp*_*est 50

有一系列ds这样的

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(136)

l = "1234567890123"
categories = [ l[i:i+5]+" - "+l[i+1:i+6] for i in range(6)]
x = np.random.choice(categories, size=1000, 
            p=np.diff(np.array([0,0.7,2.8,6.5,8.5,9.3,10])/10.))
ds = pd.Series({"Column" : x})
Run Code Online (Sandbox Code Playgroud)

有几个选项可以使轴标签更具可读性.

改变数字大小

plt.figure(figsize=(8,4)) # this creates a figure 8 inch wide, 4 inch high
sns.countplot(x="Column", data=ds)
plt.show()
Run Code Online (Sandbox Code Playgroud)

旋转刻度标签

ax = sns.countplot(x="Column", data=ds)

ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

减少字体大小

ax = sns.countplot(x="Column", data=ds)

ax.set_xticklabels(ax.get_xticklabels(), fontsize=7)
plt.tight_layout()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

当然,这些的任何组合都同样有效.

设置rcParams

可以使用rcParams全局设置数字大小和xlabel fontsize

plt.rcParams["figure.figsize"] = (8, 4)
plt.rcParams["xtick.labelsize"] = 7
Run Code Online (Sandbox Code Playgroud)

这可能有助于置于juypter笔记本之上,以便这些设置适用于其中生成的任何数字.不幸的是,使用rcParams无法旋转xticklabels.

我想值得注意的是,相同的策略自然也适用于seaborn barplot,matplotlib bar plot或pandas.bar.


Dee*_*pta 10

您可以x_labels使用 的xticks方法旋转和增加它们的字体大小pandas.pyplot

例如:

import matplotlib.pyplot as plt
plt.figure(figsize=(10,5))
chart = sns.countplot(x="HostRamSize",data=df)

plt.xticks(
    rotation=45, 
    horizontalalignment='right',
    fontweight='light',
    fontsize='x-large'  
)
Run Code Online (Sandbox Code Playgroud)

有关更多此类修改,您可以参考此链接: 从数据中绘制


hui*_*hen 7

如果您只是想确保 xticks 标签不会挤在一起,您可以设置适当的 fig 大小并尝试fig.autofmt_xdate().

此功能将自动对齐和旋转标签。


Car*_*tes 5

我不知道这是否适合您,但也许转动图形可能是一个解决方案(而不是在 上绘制x=,而是在 上绘制y=),这样:

sns.countplot(y="HostRamSize",data=df)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述