How to prevent overlapping x-axis labels in sns.countplot

后端 未结 5 803
天涯浪人
天涯浪人 2020-12-04 12:15

For the plot

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

I got the following graph with x-axis label mixing together, how do I avoid this? Sho

相关标签:
5条回答
  • 2020-12-04 12:53

    You can rotate the x_labels and increase their font size using the xticks methods of pandas.pyplot.

    For Example:

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

    For more such modifications you can refer this link: Drawing from Data

    0 讨论(0)
  • 2020-12-04 12:57
    plt.figure(figsize=(15,10)) #adjust the size of plot
    ax=sns.countplot(x=df['Location'],data=df,hue='label',palette='mako')
    
    ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")  #it will rotate text on x axis
    
    plt.tight_layout()
    plt.show()
    

    you can try this code & change size & rotation according to your need.

    0 讨论(0)
  • 2020-12-04 12:58

    Put data on Y axis and count on X axis. Simple solution!

    0 讨论(0)
  • 2020-12-04 13:03

    Having a Series ds like this

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

    there are several options to make the axis labels more readable.

    Change figure size

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

    Rotate the ticklabels

    ax = sns.countplot(x="Column", data=ds)
    
    ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")
    plt.tight_layout()
    plt.show()
    

    Decrease Fontsize

    ax = sns.countplot(x="Column", data=ds)
    
    ax.set_xticklabels(ax.get_xticklabels(), fontsize=7)
    plt.tight_layout()
    plt.show()
    

    Of course any combination of those would work equally well.

    Setting rcParams

    The figure size and the xlabel fontsize can be set globally using rcParams

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

    This might be useful to put on top of a juypter notebook such that those settings apply for any figure generated within. Unfortunately rotating the xticklabels is not possible using rcParams.

    I guess it's worth noting that the same strategies would naturally also apply for seaborn barplot, matplotlib bar plot or pandas.bar.

    0 讨论(0)
  • 2020-12-04 13:06

    If you just want to make sure xticks labels are not squeezed together, you can set a proper fig size and try fig.autofmt_xdate().

    This function will automatically align and rotate the labels.

    0 讨论(0)
提交回复
热议问题