2017-01-14 4 views
0

Когда я сюжетный последовательно на изображении, они отображаются как ожидалось:Чертежи линий над изображениями не соответствуют координатам. питон

import numpy as np 
import matplotlib.pyplot as plt 
#display in a jupyter notebook 
%matplotlib inline 
#make and display data 
image = np.full((50,60,), 0, dtype = 'float32') 
image[10:20, 10:20] = .5 
image[10,20, 30:40] = .5 
plt.plot(15,15, 'y*') 
plt.plot(35,15, 'b*') 
plt.imshow(image) 

points plotted on image

Но когда я пытаюсь построить линию между этими двумя точками оказывается использовать другую ось конвенцию :

plt.plot([15,15], [35,15], 'y-') 
plt.imshow(image) 

weird plotting

Если я задать массив точек в линия, она отлично работает:

line_x = np.array(range(15,35)) 
line_y = np.repeat(15, 20) 
plt.plot(line_x, line_y, 'y-') 
plt.imshow(image) 

line points specified

Я думаю Matplotlib использует различные соглашения оси для этих планировавших задач, но я запутался, почему это будет работать во время построения последовательных точек, но не при построении соединительная линия между двумя точками?

контексте: Я выполняю линии с использованием skimage.measure.profile_line http://scikit-image.org/docs/dev/api/skimage.measure.html. Вы указываете начало и остановку строк с помощью этой функции, но я хочу визуально визуально видеть, где мои линии просматриваются в моих изображениях.

ответ

1

Matplotlib всегда использует ту же самую конвенцию,

plt.plot(x,y, ...) 

, где x является горизонтальная координата, и y является вертикальная координата. Это не зависит от того, построите ли вы линию точек.

Когда вы звоните

plt.plot(15,15, 'y*') 
plt.plot(35,15, 'b*') 

х-координата первой точки 15, X-координата второй точки 35. Когда вы звоните plt.plot([15,15], [35,15], 'y-'), обе x-координаты двух точек равны 15.
Поэтому, имея две точки

x1 = 15; y1 = 15 
x2 = 35; y2 = 15 

вы можете построить их либо

plt.plot(x1,y1, 'y*') 
plt.plot(x2,y2, 'b*') 

или

plt.plot([x1,x2], [y1,y2], 'y-') 
+0

спасибо за очистку, что до! – Nick