Seaborn: countplot() avec des fréquences

J'ai une Pandas DataFrame avec une colonne appelée "ESSIEUX", ce qui peut prendre une valeur entière entre 3-12. Je suis en train d'utiliser Seaborn de countplot option() pour obtenir les courbes ci-dessous:

  1. gauche de l'axe y indique les fréquences de ces valeurs se produisant dans les données. L'axe s'étend sont [0%-100%], les graduations à 10%.
  2. à droite de l'axe y indique le nombre de compte, les valeurs correspondent aux graduations déterminé par la gauche de l'axe y (marquées à 10%.)
  3. axe des x indique les catégories de la barre de parcelles [3, 4, 5, 6, 7, 8, 9, 10, 11, 12].
  4. Annotation sur le dessus des barres indiquent le pourcentage réel de cette catégorie.

Le code suivant me donne le graphique ci-dessous, avec la réalité des comptes, mais je ne pouvais pas trouver un moyen de les convertir en fréquences. Je peux obtenir les fréquences à l'aide de df.AXLES.value_counts()/len(df.index) mais je ne suis pas sûr de savoir comment brancher cette information dans Seaborn de countplot().

J'ai aussi trouvé une solution de contournement pour les annotations, mais je ne suis pas sûr si c'est la meilleure mise en œuvre.

Toute aide serait appréciée!

Grâce

plt.figure(figsize=(12,8))
ax = sns.countplot(x="AXLES", data=dfWIM, order=[3,4,5,6,7,8,9,10,11,12])
plt.title('Distribution of Truck Configurations')
plt.xlabel('Number of Axles')
plt.ylabel('Frequency [%]')

for p in ax.patches:
        ax.annotate('%{:.1f}'.format(p.get_height()), (p.get_x()+0.1, p.get_height()+50))

Seaborn: countplot() avec des fréquences

EDIT:

Je suis plus près de ce dont j'ai besoin avec le code suivant, en utilisant des Pandas bar de la parcelle, d'amerrissage Seaborn. Se sent comme je suis en utilisant donc beaucoup de solutions de contournement, et il y a un moyen plus facile de le faire. Le problème avec cette approche:

  • Il n'y a pas de order mot-clé dans des Pandas de la barre de fonction plot comme Seaborn de countplot (), donc je ne peut pas tracer toutes les catégories de 3-12 comme je l'ai fait dans le countplot(). J'ai besoin de les avoir montré, même si il n'y a pas de données dans cette catégorie.
  • L'axe y secondaire bousille les bars et l'annotation pour une raison quelconque (voir le blanc quadrillage dessiné sur le texte et les bars).

    plt.figure(figsize=(12,8))
    plt.title('Distribution of Truck Configurations')
    plt.xlabel('Number of Axles')
    plt.ylabel('Frequency [%]')
    
    ax = (dfWIM.AXLES.value_counts()/len(df)*100).sort_index().plot(kind="bar", rot=0)
    ax.set_yticks(np.arange(0, 110, 10))
    
    ax2 = ax.twinx()
    ax2.set_yticks(np.arange(0, 110, 10)*len(df)/100)
    
    for p in ax.patches:
        ax.annotate('{:.2f}%'.format(p.get_height()), (p.get_x()+0.15, p.get_height()+1))

Seaborn: countplot() avec des fréquences

  • Pourquoi ne pas diviser le ticklabels par le nombre total d'obtenir des fréquences?
  • Je l'ai essayé à l'aide de vals = ax.get_yticks() et ax.set_yticks(vals/len(df)). Cependant, une fois que je le fais, toutes les étiquettes de la fin jusqu'au bas de l'écran près de l'origine, en raison de la y réelle à l'échelle de la parcelle. Évidemment, mon approche est erronée. Comment le feriez-vous?
InformationsquelleAutor marillion | 2015-10-16