Show both value and percentage on a pie chart
Question:
Here’s my current code
values = pd.Series([False, False, True, True])
v_counts = values.value_counts()
fig = plt.figure()
plt.pie(v_counts, labels=v_counts.index, autopct='%.4f', shadow=True);
Currently, it shows only the percentage (using autopct
)
I’d like to present both the percentage and the actual value (I don’t mind about the position)
Answers:
Create your own formatting function. Note that you have to recalculate the actual value from the percentage in that function somehow
def my_fmt(x):
print(x)
return '{:.4f}%n({:.0f})'.format(x, total*x/100)
values = pd.Series([False, False, True, True, True, True])
v_counts = values.value_counts()
total = len(values)
fig = plt.figure()
plt.pie(v_counts, labels=v_counts.index, autopct=my_fmt, shadow=True);
@diziet-asahi’s code didn’t work for me, instead you can use:
def autopct_format(values):
def my_format(pct):
total = sum(values)
val = int(round(pct*total/100.0))
return '{:.1f}%n({v:d})'.format(pct, v=val)
return my_format
plt.pie(mydata,labels = mylabels, autopct=autopct_format(mydata))
And here is my output:
Note: if you want more decimals, just change the number in the return of my_format(pct)
Here’s my current code
values = pd.Series([False, False, True, True])
v_counts = values.value_counts()
fig = plt.figure()
plt.pie(v_counts, labels=v_counts.index, autopct='%.4f', shadow=True);
Currently, it shows only the percentage (using autopct
)
I’d like to present both the percentage and the actual value (I don’t mind about the position)
Create your own formatting function. Note that you have to recalculate the actual value from the percentage in that function somehow
def my_fmt(x):
print(x)
return '{:.4f}%n({:.0f})'.format(x, total*x/100)
values = pd.Series([False, False, True, True, True, True])
v_counts = values.value_counts()
total = len(values)
fig = plt.figure()
plt.pie(v_counts, labels=v_counts.index, autopct=my_fmt, shadow=True);
@diziet-asahi’s code didn’t work for me, instead you can use:
def autopct_format(values):
def my_format(pct):
total = sum(values)
val = int(round(pct*total/100.0))
return '{:.1f}%n({v:d})'.format(pct, v=val)
return my_format
plt.pie(mydata,labels = mylabels, autopct=autopct_format(mydata))
And here is my output:
Note: if you want more decimals, just change the number in the return of my_format(pct)