Pie Charts

Pie Charts#

We can create a pie chart using px.pie(). An example using our global population sample data:

import plotly.express as px # import statement
df = px.data.gapminder().query("year == 2007").query("continent == 'Africa'") # subset data
df # inspect data
country continent year lifeExp pop gdpPercap iso_alpha iso_num
35 Algeria Africa 2007 72.301 33333216 6223.367465 DZA 12
47 Angola Africa 2007 42.731 12420476 4797.231267 AGO 24
131 Benin Africa 2007 56.728 8078314 1441.284873 BEN 204
167 Botswana Africa 2007 50.728 1639131 12569.851770 BWA 72
203 Burkina Faso Africa 2007 52.295 14326203 1217.032994 BFA 854
215 Burundi Africa 2007 49.580 8390505 430.070692 BDI 108
239 Cameroon Africa 2007 50.430 17696293 2042.095240 CMR 120
263 Central African Republic Africa 2007 44.741 4369038 706.016537 CAF 140
275 Chad Africa 2007 50.651 10238807 1704.063724 TCD 148
323 Comoros Africa 2007 65.152 710960 986.147879 COM 174
335 Congo, Dem. Rep. Africa 2007 46.462 64606759 277.551859 COD 180
347 Congo, Rep. Africa 2007 55.322 3800610 3632.557798 COG 178
371 Cote d'Ivoire Africa 2007 48.328 18013409 1544.750112 CIV 384
431 Djibouti Africa 2007 54.791 496374 2082.481567 DJI 262
467 Egypt Africa 2007 71.338 80264543 5581.180998 EGY 818
491 Equatorial Guinea Africa 2007 51.579 551201 12154.089750 GNQ 226
503 Eritrea Africa 2007 58.040 4906585 641.369524 ERI 232
515 Ethiopia Africa 2007 52.947 76511887 690.805576 ETH 231
551 Gabon Africa 2007 56.735 1454867 13206.484520 GAB 266
563 Gambia Africa 2007 59.448 1688359 752.749726 GMB 270
587 Ghana Africa 2007 60.022 22873338 1327.608910 GHA 288
623 Guinea Africa 2007 56.007 9947814 942.654211 GIN 324
635 Guinea-Bissau Africa 2007 46.388 1472041 579.231743 GNB 624
827 Kenya Africa 2007 54.110 35610177 1463.249282 KEN 404
887 Lesotho Africa 2007 42.592 2012649 1569.331442 LSO 426
899 Liberia Africa 2007 45.678 3193942 414.507341 LBR 430
911 Libya Africa 2007 73.952 6036914 12057.499280 LBY 434
923 Madagascar Africa 2007 59.443 19167654 1044.770126 MDG 450
935 Malawi Africa 2007 48.303 13327079 759.349910 MWI 454
959 Mali Africa 2007 54.467 12031795 1042.581557 MLI 466
971 Mauritania Africa 2007 64.164 3270065 1803.151496 MRT 478
983 Mauritius Africa 2007 72.801 1250882 10956.991120 MUS 480
1031 Morocco Africa 2007 71.164 33757175 3820.175230 MAR 504
1043 Mozambique Africa 2007 42.082 19951656 823.685621 MOZ 508
1067 Namibia Africa 2007 52.906 2055080 4811.060429 NAM 516
1127 Niger Africa 2007 56.867 12894865 619.676892 NER 562
1139 Nigeria Africa 2007 46.859 135031164 2013.977305 NGA 566
1271 Reunion Africa 2007 76.442 798094 7670.122558 REU 638
1295 Rwanda Africa 2007 46.242 8860588 863.088464 RWA 646
1307 Sao Tome and Principe Africa 2007 65.528 199579 1598.435089 STP 678
1331 Senegal Africa 2007 63.062 12267493 1712.472136 SEN 686
1355 Sierra Leone Africa 2007 42.568 6144562 862.540756 SLE 694
1403 Somalia Africa 2007 48.159 9118773 926.141068 SOM 706
1415 South Africa Africa 2007 49.339 43997828 9269.657808 ZAF 710
1451 Sudan Africa 2007 58.556 42292929 2602.394995 SDN 736
1463 Swaziland Africa 2007 39.613 1133066 4513.480643 SWZ 748
1523 Tanzania Africa 2007 52.517 38139640 1107.482182 TZA 834
1547 Togo Africa 2007 58.420 5701579 882.969944 TGO 768
1571 Tunisia Africa 2007 73.923 10276158 7092.923025 TUN 788
1595 Uganda Africa 2007 51.542 29170398 1056.380121 UGA 800
1691 Zambia Africa 2007 42.384 11746035 1271.211593 ZMB 894
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298 ZWE 716
df.loc[df['pop'] < 2.e6, 'country'] = 'Other countries' # filter dataframe to classify countries below a population size threshold as "Other countries"
fig = px.pie(df, values='pop', names='country', title='Population of African continent') # crate figure
fig # show figure

Perhaps a useful example of the limited utility of pie charts. In this example, we pass the filtered dataframe to px.pie(), and specify the pop field as the slice value and country as the slice name.

Another example using the restaurant bill and tip data.

df = px.data.tips() # load data
df # inspect data
fig = px.pie(df, values='tip', names='day') # create plot
fig # show output

In this example, we pass the entire data frame to px.pie() and assign tip as the slice value and day as the slice name. Each day is a slice of the pie, and plotly.express and the px.pie() function have done the underlying calculations to show the aggregate tip data as a percent.

Additional Resources#