Created
October 23, 2020 01:16
-
-
Save nfraprado/2d21942f5426c0ac0e0de9701c80a2bf to your computer and use it in GitHub Desktop.
Gráficos sobre pizza (mas não de pizza)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import math | |
| import matplotlib.pyplot as plt | |
| pedacos_por_pessoa = 3 | |
| pedacos_por_pizza = 8 | |
| limiar_nova_pizza = 1/8 | |
| maximo_pessoas = 20 | |
| def num_pizzas1(n): | |
| return math.ceil(pedacos_por_pessoa * (n + 1) / pedacos_por_pizza) | |
| def num_pizzas2(n): | |
| m = math.modf(pedacos_por_pessoa * (n + 1) / pedacos_por_pizza) | |
| if m[0] > limiar_nova_pizza: | |
| return int(m[1] + 1) | |
| else: | |
| return int(m[1]) | |
| def num_pizzas3(n): | |
| return math.ceil(pedacos_por_pessoa * n / pedacos_por_pizza) | |
| func_pizzas = {'Arredonda para cima considerando uma pessoa a mais': | |
| {'func': num_pizzas1, 'comidos': [], 'sobra': []}, | |
| 'Arredonda para cima considerando uma pessoa a mais a não ser que falte menos de um pedaço': | |
| {'func': num_pizzas2, 'comidos': [], 'sobra': []}, | |
| 'Arredonda para cima': | |
| {'func': num_pizzas3, 'comidos': [], 'sobra': []}} | |
| n_pessoas = range(1, maximo_pessoas + 1) | |
| for d in func_pizzas.values(): | |
| for n in n_pessoas: | |
| total = d['func'](n) * pedacos_por_pizza | |
| comidos = n * pedacos_por_pessoa | |
| d['comidos'].append(comidos) | |
| d['sobra'].append(total - comidos) | |
| xticks = range(1, maximo_pessoas + 1) | |
| for nome, d in func_pizzas.items(): | |
| yticks = range(8, d['func'](maximo_pessoas) * pedacos_por_pizza + 1, 8) | |
| plt.bar(n_pessoas, d['comidos']) | |
| plt.bar(n_pessoas, d['sobra'], bottom=d['comidos']) | |
| plt.grid(axis='y', which='major', linestyle='-', color='darkgray') | |
| plt.grid(axis='y', which='minor', linestyle='-', linewidth=0.5, | |
| color='white') | |
| plt.minorticks_on() | |
| plt.xticks(xticks) | |
| plt.axes().set_yticks(range(1, d['func'](maximo_pessoas) * pedacos_por_pizza + 1), | |
| minor=True) | |
| plt.tick_params(axis='x', which='minor', bottom=False, top=False, labelbottom=False) | |
| plt.yticks(yticks) | |
| plt.title(nome, wrap=True) | |
| plt.xlabel("Pessoas") | |
| plt.ylabel("Pedaços de pizza") | |
| plt.legend(["Comido", "Sobra/Extra"]) | |
| plt.savefig(f'{nome}', dpi=300) | |
| plt.clf() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment