Как вы непосредственно накладываете точечный график поверх изображения jpg в matplotlib / Python? - PullRequest
27 голосов
/ 22 февраля 2011

Мне нужно быстро построить кадры jpg, которые получаются в результате вывода алгоритма отслеживания. Сопутствующим с jpg кадрами являются текстовые файлы, содержащие простые (x, y) данные, определяющие местонахождение целей изображения, которые отслеживаются. Я хотел бы использовать matplotlib для построения изображений jpg, а затем наложить график рассеяния данных (x, y), которые считываются из текстового файла и сохраняются в списке Pythonic. Ниже приведен код, который будет отображать изображение jpg, но во всех работах, которые я сделал с руководствами и страницами справки matplotlib, scipy и PIL, я не могу найти ничего, объясняющего, как поддерживать это окно графика и просто наложить разбросный график простые маркеры в различных (x, y) местах на изображении. Любая помощь с благодарностью.

import matplotlib.pyplot as plt;
im = plt.imread(image_name);
implot = plt.imshow(im);
plt.show()

Ответы [ 3 ]

42 голосов
/ 22 февраля 2011

Функция pyplot.scatter() была специально разработана по этой причине:

import matplotlib.pyplot as plt
im = plt.imread(image_name)
implot = plt.imshow(im)

# put a blue dot at (10, 20)
plt.scatter([10], [20])

# put a red dot, size 40, at 2 locations:
plt.scatter(x=[30, 40], y=[50, 60], c='r', s=40)

plt.show()

См. Документацию для получения дополнительной информации.

10 голосов
/ 22 февраля 2011

это должно работать:

import matplotlib.pyplot as plt
im = plt.imread('test.png')
implot = plt.imshow(im)
plt.plot([100,200,300],[200,150,200],'o')
plt.show()

имейте в виду, что каждый пиксель изображения - это одна единица по осям x, y. 'o' - это краткий способ заставить функцию plot использовать круги вместо линий.

6 голосов
/ 30 июня 2016

Я знаю, что на это ответили, но так же работает и Зордер.Что замечательно, если вы хотите поместить что-то на диаграмму рассеяния или под ней

import matplotlib as plt
im = plt.imread(image_name)
plt.imshow(im,zorder=1)
plt.scatter(x,y,zorder=2)
plt.show()

нижний zorder означает, что это ниже других вещей

...