1
votes

Tracer un graphique à secteurs à partir d'un dictionnaire

Je cherche depuis des heures, mais je ne trouve tout simplement pas la solution à mon problème.

J'ai un dictionnaire:

TypeError                                 Traceback (most recent call last)
<ipython-input-258-7ca72d2d0ca4> in <module>
      1 # dont use values inside a list as column values for a dataframe
      2 browser2 = {}
----> 3 [browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]
      4 
      5 x = pd.Series(browser2)

<ipython-input-258-7ca72d2d0ca4> in <listcomp>(.0)
      1 # dont use values inside a list as column values for a dataframe
      2 browser2 = {}
----> 3 [browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]
      4 
      5 x = pd.Series(browser2)

TypeError: 'int' object is not subscriptable

Tout ce que je veux, c'est obtenir ceci est représenté dans un graphique à secteurs qui montre la répartition en pourcentage de ces éléments. Comment puis-je tracer ça ????

J'ai essayé la solution ici: Essayer de créer un camembert et un histogramme à partir des données ci-dessous

J'ai donc utilisé le code qui y a été publié comme solution :

amount_of_TP_ner_tags # this is the dictionary I want to plot. see above

# dont use values inside a list as column values for a dataframe
browser2 = {}
[browser2.update({key : val[0]}) for key, val in amount_of_TP_ner_tags.items()]

x = pd.Series(browser2)
y = pd.Series.sort_values(x)
z = pd.DataFrame(y)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(8,4))
# you need to specify which column of the dataframe you want to plot (here 0)
z.plot(y=0, kind = 'pie', ax = axes[0])
z.plot(kind = 'bar', ax = axes[1])
axes[0].set_aspect("equal") # make aspect equal (such that circle is not eliptic)
#place the legend at a decent position
axes[0].legend(loc=1, bbox_to_anchor= (1,0.2), fontsize=11)
plt.tight_layout()
plt.show()

Mais je reçois un message d'erreur:

{'DATE': 65,
 'ORG': 93,
 'PERSON': 62,
 'GPE': 18,
 'PRODUCT': 18,
 'FAC': 4,
 'CARDINAL': 50,
 'ORDINAL': 15,
 'NORP': 10,
 'MONEY': 3,
 'PERCENT': 2,
 'TIME': 5,
 'LOC': 5,
 'QUANTITY': 2}

Alors, comment puis-je tracer cela?! J'ai vraiment besoin d'aide, s'il vous plaît.

Cordialement


0 commentaires

4 Réponses :


2
votes

Le moyen le plus simple consiste à utiliser le camembert matplotlib

import matplotlib.pyplot as plt

your_data = {'DATE': 65,
 'ORG': 93,
 'PERSON': 62,
 'GPE': 18,
 'PRODUCT': 18,
 'FAC': 4,
 'CARDINAL': 50,
 'ORDINAL': 15,
 'NORP': 10,
 'MONEY': 3,
 'PERCENT': 2,
 'TIME': 5,
 'LOC': 5,
 'QUANTITY': 2}

# Data to plot
labels = []
sizes = []

for x, y in your_data.items():
    labels.append(x)
    sizes.append(y)

# Plot
plt.pie(sizes, labels=labels)

plt.axis('equal')
plt.show()


0 commentaires

0
votes

Votre erreur ne concerne pas le traçage, vous essayez d'accéder à l'index d'un entier.

Essayez ceci:

browser2 = {}
[browser2.update({key : val}) for key, val in amount_of_TP_ner_tags.items()]


0 commentaires

0
votes

C'est très simple

Étape 1: Extraire les étiquettes et les valeurs du dictionnaire

import matplotlib.pyplot as plt

plt.pie(values, labels=labels)
plt.show()

Étape 2: Appelez simplement le matplotlib.pyplot ' méthode de tarte.

# Get the Keys and store them in a list
labels = list(yourData.keys())

# Get the Values and store them in a list
values = list(yourData.values())

Et vous serez prêt à partir.


0 commentaires

0
votes
import matplotlib.pyplot as plt

your_data = {'DATE': 65,
 'ORG': 93,
 'PERSON': 62,
 'GPE': 18,
 'PRODUCT': 18,
 'FAC': 4,
 'CARDINAL': 50,
 'ORDINAL': 15,
 'NORP': 10,
 'MONEY': 3,
 'PERCENT': 2,
 'TIME': 5,
 'LOC': 5,
 'QUANTITY': 2}

plt.pie([float(your_data[v]) for v in your_data], labels=[str(k) for k in your_data], autopct='%1.1f%%')
plt.show()

0 commentaires