3
respostas

[Sugestão] Gráficos e função seed

Olá! Queria apenas compartilhar um código que escrevi para simular o exercício da sessão 05.Plotando com Matplotlib.

import matplotlib.pyplot as plt
from random import randrange, seed

notas_matematica = ['Matemática']
notas_biologia = ['Biologia']
notas_portugues = ['Português']
notas = [notas_matematica, notas_biologia, notas_portugues]

#Gerando valores aleatórios para as notas
semente = 1

for i in notas:
  seed(semente)
  for j in range(10): 
    nota = randrange(0,11)
    i.append(nota)
  semente += 1
print(notas, '\n')

#Gerando os gráficos
for i in notas:
  x = list(range(1, 11))
  y = i[1:]
  plt.plot(x, y, marker = 'o')
  plt.title(i[0])
  plt.xlabel('Prova')
  plt.ylabel('Notas de ' + i[0])
  plt.show()
3 respostas

Olá, Pedro Henrique! Tudo bom? Espero que sim!

Parabéns, o código funciona muito bem, ficou bem completo. O uso do seed é interessante para manter os mesmos valores aleatórios, e uma coisa importante a comentar, é que mesmo que usássemos somente um seed(1) no código, como:

#Gerando valores aleatórios para as notas
seed(1)

for i in notas:
  for j in range(10): 
    nota = randrange(0,11)
    i.append(nota)

print(notas, '\n')

Saída:

[['Matemática', 2, 9, 1, 4, 1, 7, 7, 7, 10, 6], ['Biologia', 3, 1, 7, 0, 6, 6, 9, 0, 7, 4], ['Português', 3, 9, 1, 5, 0, 0, 0, 10, 8, 0]] 

Os valores para cada lista já seriam diferentes entre si. Não necessariamente precisaria usar outra seed para utilizar o randrange com valores diferentes, porque cada lista é executada em um momento diferente, então não são mais repetidos os valores inicias da lista pseudoaleatória que o randrange utiliza. Outro teste interessante pra executar e ver os valores diferentes:

from random import randrange, seed

seed(2)
for _ in range(10): 
    numero_qualquer = randrange(0,11)
    print(numero_qualquer, end='')
print('\n--')
for _ in range(10): 
    numero_qualquer = randrange(0,11)
    print(numero_qualquer, end='')

Saída:

01152104493
--
909102610685

É utilizado o mesmo código e funções para gerar 10 números aleatórios em dois momentos diferentes, com o mesmo seed.

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Não é necessário fechar o tópico, outras pessoas podem ser ajudadas por ele :D

Obrigado Marcus! Antes tinha colocado o seed(1) dentro do laço, e aí quando rodei o código, acabou gerando os mesmos números para as 3 disciplinas. O jeito que escrevi aí foi a solução que pensei, mas realmente seria muito mais simples só colocar o seed fora do laço. Obrigado pela ajuda!

Queria aproveitar e tirar uma dúvida. Caso execute o mesmo código que escrevi, mas sem a função plt.show(), acaba gerando uma imagem com os três gráficos sobrepostos. Que função poderia usar para criar uma legenda, para relacionar cada uma das cores a uma das disciplinas?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Olá, você pode aplicar um parâmetro 'label' dentro do 'plot', e depois chamar sozinho o plt.legend():

plt.plot(..., label='nome') #nome também pode ser os itens de uma lista

E você também pode passar uma lista dentro do plt.legend() com os valores de cada label.

Na documentação do Legend no site do matplotlib você encontra mais exemplos.