I have a dictionary:
{'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}
All I want is to get this plotted in a pie chart which shows the percentage distribution of these items. How can i plot this????
I have tried the solution here: Trying to create a pie and bar chart from the data below
So i used the code which was published there as a 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()
But I receive an error message:
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
So how can I plot this?
Creating Pie Chart Matplotlib API has pie() function in its pyplot module which create a pie chart representing the data in an array. Parameters: data represents the array of data values to be plotted, the fractional area of each slice is represented by data/sum(data).
Steps of construction of pie chart for a given data: Draw a circle of any radius. Starting with the horizontal radius, draw radii, making central angles corresponding to the values of respective components. Repeat the process for all the components of the given data.
The simplest way is to use matplotlib pie chart
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()
It's very easy
Step1: Extract the labels and values from the dictionary
# 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())
Step2: Simple Call the matplotlib.pyplot
's pie method.
import matplotlib.pyplot as plt
plt.pie(values, labels=labels)
plt.show()
And you will be good to go.
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()
Your error is not in plotting, you are trying to access the index of an integer.
try this:
browser2 = {}
[browser2.update({key : val}) for key, val in amount_of_TP_ner_tags.items()]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With