Matplotlib соединяет точки диаграммы рассеяния с линией - Python

104

У меня есть два списка, даты и значения. Я хочу построить их с помощью matplotlib. Следующее создает диаграмму рассеяния моих данных.

import matplotlib.pyplot as plt

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

plt.plot(dates, values) создает линейный график.

Но что мне действительно нужно, так это диаграмма рассеяния, где точки соединены линией.

Аналогично R:

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

, который дает мне диаграмму рассеяния точек, наложенных линией, соединяющей точки.

Как мне это сделать в Python?

brno792
источник
5
Звоните show()после звонка в оба scatter()и plot()сначала?

Ответы:

138

Думаю, у @Evert правильный ответ:

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

Это почти то же самое, что и

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

или любой другой стиль, который вы предпочитаете.

Ханнес Оврен
источник
3
'linestyle' был хорошим ключом к поиску по ключевым словам для меня, чтобы пройти через (чудовищную) документацию matplotlib.
Reb.Cabin
2
@aaronsnoswell Размер и цвет имеют смысл только для точек, через которые вы все еще можете построить график scatter, как в моем первом примере. В этом вопросе ничего не говорится о различной толщине или цвете линий, поэтому я думаю, что ваша критика действительно немного несправедлива.
Ханнес Оврен
28

Для красных линий и точек

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

или для маркеров x и синих линий

plt.plot(dates, values, 'xb-')
Стив Барнс
источник
Похоже, ты, Эверт и кигураи в порядке. Вы можете вызвать как scatter (), так и plot () перед вызовом show (). Или просто вызовите plot () с атрибутами линии и точки, как описал Стив Барнс. Спасибо
brno792
15

В дополнение к тому, что указано в других ответах, ключевое слово «zorder» позволяет определять порядок, в котором различные объекты отображаются по вертикали. Например:

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

отображает символы разброса в верхней части строки, а

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

отображает линию над символами разброса.

См., Например, демонстрацию zorder

user3756936
источник