Matplotlib conecta pontos do gráfico de dispersão com linha - Python

102

Eu tenho duas listas, datas e valores. Eu quero representá-los usando matplotlib. O seguinte cria um gráfico de dispersão dos meus dados.

import matplotlib.pyplot as plt

plt.scatter(dates,values)
plt.show()

plt.plot(dates, values) cria um gráfico de linha.

Mas o que eu realmente quero é um gráfico de dispersão onde os pontos são conectados por uma linha.

Semelhante a em R:

plot(dates, values)
lines(dates, value, type="l")

, o que me dá um gráfico de dispersão de pontos sobrepostos por uma linha conectando os pontos.

Como faço isso em python?

brno792
fonte
5
Ligar show()depois de ligar para ambos scatter()e plot()primeiro?

Respostas:

136

Acho que @Evert tem a resposta certa:

plt.scatter(dates,values)
plt.plot(dates, values)
plt.show()

Que é praticamente o mesmo que

plt.plot(dates, values, '-o')
plt.show()

ou qualquer estilo de linha que você preferir.

Hannes Ovrén
fonte
3
'linestyle' foi uma boa dica de pesquisa de palavra-chave para eu navegar pelos (ginormosos) documentos matplotlib.
Reb.Cabin de
2
@aaronsnoswell O tamanho e a cor só fazem sentido para os pontos, pelos quais você ainda pode traçar um gráfico scatter, conforme meu primeiro exemplo. A pergunta não diz nada sobre a variação da espessura ou da cor de uma linha, então acho que sua crítica é um pouco injusta, na verdade.
Hannes Ovrén
28

Para linhas vermelhas e pontos

plt.plot(dates, values, '.r-') 

ou para marcadores x e linhas azuis

plt.plot(dates, values, 'xb-')
Steve Barnes
fonte
Parece que você, Evert e kigurai estão bem. Você pode chamar scatter () e plot () antes de chamar show (). Ou apenas chame plot () com os atributos de linha e ponto como Steve Barnes descreveu. Obrigado
brno792
14

Além do que consta nas outras respostas, a palavra-chave "zorder" permite decidir a ordem em que os diferentes objetos são plotados verticalmente. Por exemplo:

plt.plot(x,y,zorder=1) 
plt.scatter(x,y,zorder=2)

plota os símbolos de dispersão no topo da linha, enquanto

plt.plot(x,y,zorder=2)
plt.scatter(x,y,zorder=1)

traça a linha sobre os símbolos de dispersão.

Veja, por exemplo, a demonstração do zorder

user3756936
fonte