forked from MapComplete/MapComplete
		
	
		
			
	
	
		
			62 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								from datetime import datetime
							 | 
						||
| 
								 | 
							
								from matplotlib import pyplot
							 | 
						||
| 
								 | 
							
								import json
							 | 
						||
| 
								 | 
							
								import sys
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def pyplot_init():
							 | 
						||
| 
								 | 
							
								    pyplot.close('all')
							 | 
						||
| 
								 | 
							
								    pyplot.figure(figsize=(14, 8), dpi=200)
							 | 
						||
| 
								 | 
							
								    pyplot.xticks(rotation='vertical')
							 | 
						||
| 
								 | 
							
								    pyplot.grid()
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def genKeys(data, type):
							 | 
						||
| 
								 | 
							
								    keys = map(lambda kv: kv["key"], data)
							 | 
						||
| 
								 | 
							
								    if type == "date":
							 | 
						||
| 
								 | 
							
								        keys = map(lambda key :  datetime.strptime(key, "%Y-%m-%dT%H:%M:%S.000Z"), keys)
							 | 
						||
| 
								 | 
							
								    return list(keys)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def createPie(options):
							 | 
						||
| 
								 | 
							
								    data = options["plot"]["count"]
							 | 
						||
| 
								 | 
							
								    keys = genKeys(data, options["interpetKeysAs"])
							 | 
						||
| 
								 | 
							
								    values = list(map(lambda kv: kv["value"], data))
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    total = sum(map(lambda kv : kv["value"], data))
							 | 
						||
| 
								 | 
							
								    first_pct = data[0]["value"] / total
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    pyplot_init()
							 | 
						||
| 
								 | 
							
								    pyplot.pie(values, labels=keys, startangle=(90 - 360 * first_pct / 2))
							 | 
						||
| 
								 | 
							
								                   
							 | 
						||
| 
								 | 
							
								def createBar(options):
							 | 
						||
| 
								 | 
							
								    data = options["plot"]["count"]
							 | 
						||
| 
								 | 
							
								    keys = genKeys(data, options["interpetKeysAs"])
							 | 
						||
| 
								 | 
							
								    values = list(map(lambda kv: kv["value"], data))
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    pyplot.bar(keys, values, label=options["name"])
							 | 
						||
| 
								 | 
							
								    pyplot.legend()
							 | 
						||
| 
								 | 
							
								           
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								pyplot_init()
							 | 
						||
| 
								 | 
							
								title = sys.argv[1]
							 | 
						||
| 
								 | 
							
								pyplot.title = title
							 | 
						||
| 
								 | 
							
								names = []
							 | 
						||
| 
								 | 
							
								while(True):  
							 | 
						||
| 
								 | 
							
								    line = sys.stdin.readline()
							 | 
						||
| 
								 | 
							
								    if line == "" or line == "\n":
							 | 
						||
| 
								 | 
							
								        if(len(names) > 1):
							 | 
						||
| 
								 | 
							
								             pyplot.legend(loc="upper left", ncol=3)
							 | 
						||
| 
								 | 
							
								        pyplot.savefig(title+".png", dpi=400, facecolor='w', edgecolor='w',
							 | 
						||
| 
								 | 
							
								                       bbox_inches='tight')
							 | 
						||
| 
								 | 
							
								        break
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    options = json.loads(line)
							 | 
						||
| 
								 | 
							
								    print("Creating "+options["plot"]["type"]+" '"+options["name"]+"'")
							 | 
						||
| 
								 | 
							
								    names.append(options["name"])
							 | 
						||
| 
								 | 
							
								    if(options["plot"]["type"] == "pie"):
							 | 
						||
| 
								 | 
							
								        createPie(options)
							 | 
						||
| 
								 | 
							
								    elif(options["plot"]["type"] == "bar"):
							 | 
						||
| 
								 | 
							
								        createBar(options)
							 | 
						||
| 
								 | 
							
								    else:
							 | 
						||
| 
								 | 
							
								        print("Unkown type: "+options.type)
							 |