web-dev-qa-db-fra.com

pandas graphique à secteurs supprimer le texte de l'étiquette sur le coin

l'exemple de graphique à secteurs sur pandas tutoriel de traçage http://pandas.pydata.org/pandas-docs/version/0.15.0/visualization.html génère ce qui suit figure:

enter image description here

avec ce code:

import matplotlib.pyplot as plt
plt.style.use('ggplot')
import numpy as np
np.random.seed(123456)


import pandas as pd
df = pd.DataFrame(3 * np.random.Rand(4, 2), index=['a', 'b', 'c', 'd'], columns=['x', 'y'])

f, axes = plt.subplots(1,2, figsize=(10,5))
for ax, col in Zip(axes, df.columns):
    df[col].plot(kind='pie', autopct='%.2f', labels=df.index,  ax=ax, title=col, fontsize=10)
    ax.legend(loc=3)

plt.show()

Je veux supprimer l'étiquette de texte (a, b, c, d) des deux sous-tracés, car pour mon application ces étiquettes sont longues, donc je veux seulement les afficher dans la légende.

Après avoir lu ceci: Comment ajouter une légende au graphique à secteurs matplotlib? , je trouve un moyen avec matplotlib.pyplot.pie mais le chiffre n'est pas aussi sophistiqué même si j'utilise toujours ggplot.

f, axes = plt.subplots(1,2, figsize=(10,5))
for ax, col in Zip(axes, df.columns):
    patches, text, _ = ax.pie(df[col].values, autopct='%.2f')
    ax.legend(patches, labels=df.index, loc='best')

enter image description here

Ma question est, existe-t-il un moyen de combiner les choses que je veux des deux côtés? pour être clair, je veux la fantaisie des pandas, mais retirez le texte des coins.

Je vous remercie

17
fast tooth

Vous pouvez désactiver les étiquettes dans le graphique, puis les définir dans l'appel à legend:

df[col].plot(kind='pie', autopct='%.2f', labels=['','','',''],  ax=ax, title=col, fontsize=10)
ax.legend(loc=3, labels=df.index)

ou

... labels=None ...

enter image description here

28
iayork