forked from MapComplete/MapComplete
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			No EOL
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			No EOL
		
	
	
		
			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) |