Matplotlib łączy punkty wykresu rozrzutu za pomocą linii - Python

103

Mam dwie listy, daty i wartości. Chcę je wykreślić za pomocą matplotlib. Poniższy rysunek tworzy wykres punktowy moich danych.

import matplotlib.pyplot as plt

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

plt.plot(dates, values) tworzy wykres liniowy.

Ale to, czego naprawdę chcę, to wykres rozrzutu, w którym punkty są połączone linią.

Podobnie jak w R:

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

, co daje mi wykres rozrzutu punktów nałożonych na linię łączącą punkty.

Jak to zrobić w Pythonie?

brno792
źródło
5
Zadzwoń show()po wywołaniu oba scatter()i plot()po raz pierwszy?

Odpowiedzi:

136

Myślę, że @Evert ma właściwą odpowiedź:

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

Co jest prawie takie samo jak

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

lub inny preferowany styl .

Hannes Ovrén
źródło
3
„Linestyle” był dla mnie dobrą wskazówką przy wyszukiwaniu słów kluczowych, aby przejść przez (gigantyczne) dokumenty matplotlib.
Reb.Cabin
2
@aaronsnoswell Rozmiar i kolor mają sens tylko w przypadku punktów, przez które nadal można wykreślić scatter, jak na moim pierwszym przykładzie. Pytanie nie mówi nic o różnej grubości lub kolorze linii, więc myślę, że twoja krytyka jest naprawdę trochę niesprawiedliwa.
Hannes Ovrén
28

Dla czerwonych linii to punkty

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

lub dla znaczników x i niebieskich linii

plt.plot(dates, values, 'xb-')
Steve Barnes
źródło
Wygląda na to, że ty, Evert i kigurai wszystko w porządku. Możesz wywołać zarówno scatter (), jak i plot () przed wywołaniem metody show (). Lub po prostu wywołaj funkcję plot () z atrybutami linii i punktów, jak opisał Steve Barnes. Dzięki
brno792
14

Oprócz tego, co podano w innych odpowiedziach, słowo kluczowe „zorder” pozwala określić kolejność, w jakiej różne obiekty są kreślone w pionie. Na przykład:

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

drukuje symbole rozproszenia na górze linii, a

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

kreśli linię nad symbolami rozproszenia.

Zobacz np. Demo zorder

user3756936
źródło