在图像上绘制线条与坐标不匹配。蟒

时间:2017-01-14 19:44:19

标签: python image matplotlib plot jupyter-notebook

当我在图像上按顺序绘制点时,它们会按预期显示:

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正在为这些绘图任务使用不同的轴约定,但我很困惑为什么在绘制连续点时这会起作用,而不是在绘制两点之间的连接线时?

context:我正在使用skimage.measure.profile_line http://scikit-image.org/docs/dev/api/skimage.measure.html执行linecans。您可以使用此功能指定线扫描的开始和停止,但我想直观地演示我的线扫描在我的图像中的位置。

1 个答案:

答案 0 :(得分:1)

Matplotlib 始终使用相同的约定

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

其中x是水平坐标,y是垂直坐标。这与您是否绘制一系列点无关。

致电时

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

第一个点的x坐标为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-')