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

7eumitmz  于 2023-06-06  发布在  其他
关注(0)|答案(4)|浏览(167)

为了阴谋

sns.countplot(x="HostRamSize",data=df)

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

utugiqy6

utugiqy61#

像这样的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})

有几个选项可使轴标签更可读。

更改图形大小

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

旋转ticklabel

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

ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")
plt.tight_layout()
plt.show()

减小字体大小

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

ax.set_xticklabels(ax.get_xticklabels(), fontsize=7)
plt.tight_layout()
plt.show()

当然,这些方法的任何组合都同样有效。

设置rcParams

可以使用rcParams全局设置图形大小和xlabel字体大小

plt.rcParams["figure.figsize"] = (8, 4)
plt.rcParams["xtick.labelsize"] = 7

这可能是有用的放在顶部的juypter笔记本电脑,使这些设置适用于任何数字内生成。不幸的是,使用rcParams无法旋转xticklabels。
我想值得注意的是,同样的策略自然也适用于seaborn barplot,matplotlib bar plot或pandas.bar。

os8fio9y

os8fio9y2#

您可以使用pandas.pyplotxticks方法旋转x_labels并增大其字体大小。

例如:

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'  
)

如需了解更多此类修改,请参阅此链接:Drawing from Data

tmb3ates

tmb3ates3#

如果你只是想确保xticks标签不会挤在一起,你可以设置一个合适的fig大小,并尝试fig.autofmt_xdate()
此功能将自动对齐和旋转标签。

b0zn9rqh

b0zn9rqh4#

我不知道这是否是你的一个选择,但也许把图形可能是一个解决方案(而不是在x=上绘图,在y=上绘图),例如:

sns.countplot(y="HostRamSize",data=df)

相关问题