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.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software