Skip to content

Instantly share code, notes, and snippets.

@nfraprado
Created October 23, 2020 01:16
Show Gist options
  • Select an option

  • Save nfraprado/2d21942f5426c0ac0e0de9701c80a2bf to your computer and use it in GitHub Desktop.

Select an option

Save nfraprado/2d21942f5426c0ac0e0de9701c80a2bf to your computer and use it in GitHub Desktop.
Gráficos sobre pizza (mas não de pizza)
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