Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create pie chart?

new to Python and stuck with a pie chart. Apologies for the complexity but I am at a lost as how to proceed .. I have this dataset in the form of a dictionary (part of it)

{'Deaths5': 94, 'Deaths10': 379, 'Deaths12': 388, 'Deaths8': 138, 'Deaths25': None,
 'IM_Deaths2': None, 'Deaths14': 511, 'Deaths1': 20535, 'Deaths23': 2643, 'Deaths6': 62,
 'IM_Deaths1': 4349, 'Deaths17': 1036, 'Deaths18': 1234, 'Sex': '2', 'Deaths11': 358, 'Deaths22': 1708,
 'Deaths21': 1922, 'IM_Frmat': '08', 'SubDiv': '', 'Deaths15': 600, 'Deaths4': 157, 'Admin1': '',
 'IM_Deaths3': None, 'Deaths19': 1125, 'Deaths24': None, 'Frmat': '01', 'Deaths20': 1602, 'Deaths3': 350,
 'Year': '1964', 'Deaths7': 149, 'Deaths9': 311, 'Deaths26': 33, 'Country': '2150',
 'Deaths16': 932, 'Deaths13': 454, 'Deaths2': 4349, 'IM_Deaths4': None, 'Cause': 'A000', 'List': '07A' .......

I need to generate a pie chart that shows the latest year - 2013, and shows the top 8 causes of death code 'Cause' from field 'Deaths1'

So to sum it up:

So for example the data should be filtered as

Year    CAUSE    Top8
2013     A000    5000
2013     A411    400
2013     A50     200
.....

and then shown as a pie chart with anything after the top 8 treated as 'other'

I could do this very easily with SQL but with Python...I am not sure.

like image 581
Alex of the Wild Avatar asked Oct 11 '16 01:10

Alex of the Wild


1 Answers

Full disclosure, I'm a member of the ZingChart team.

You can use ZingChart for free to accomplish this. I'm not sure if you were looking for the answer to include how to parse the dictionary or just the data visualization portion. With some simple attributes we can display the data in a legible manner. From there we can hover nodes to get more information about the node and we can click on the legend to remove a node from the graph. This will re calculate the percentage taken up be each node amongst remaining, non hidden nodes.

var myConfig = {
 	type: 'pie',
 	title:{
 	  text: '2013 Deaths',
 	  adjustlayout: true
 	},
 	legend:{
 	  toggleAction: 'remove'
 	},
 	plot:{
 	  valueBox:{ // hard label
 	    placement:'out'
 	  }
 	},
 	tooltip:{ // for node hover
 	  text:'%t: Had %v deaths in 2013'
 	},
	series: [
		{
			values: [5000],
			text: 'A000'
		},
		{
			values: [400],
			text: 'A411'
		},
		{
			values: [200],
			text: 'A00'
		},
		{
			values: [900],
			text: 'Other'
		}
	]
};

zingchart.render({ 
	id: 'myChart', 
	data: myConfig, 
	height: '100%', 
	width: '100%' 
});
html, body {
	height:100%;
	width:100%;
	margin:0;
	padding:0;
}
#myChart {
	height:100%;
	width:100%;
	min-height:150px;
}
<!DOCTYPE html>
<html>
	<head>
	<!--Assets will be injected here on compile. Use the assets button above-->
		<script src= "https://cdn.zingchart.com/zingchart.min.js"></script>
		<script> zingchart.MODULESDIR = "https://cdn.zingchart.com/modules/";
		ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9","ee6b7db5b51705a13dc2339db3edaf6d"];</script>
	<!--Inject End-->
	</head>
	<body>
		<div id="myChart"></div>
	</body>
</html>
like image 113
nardecky Avatar answered Oct 07 '22 04:10

nardecky