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

Nic*_*ick 4 python plot image matplotlib 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)
Run Code Online (Sandbox Code Playgroud)

绘制在图像上的点

但是当我尝试在这两个点之间绘制一条线时,它似乎使用了不同的轴约定:

plt.plot([15,15], [35,15], 'y-')
plt.imshow(image) 
Run Code Online (Sandbox Code Playgroud)

诡异的情节

如果我在行中指定一组点,它工作正常:

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

指定的线点

我猜 matplotlib 为这些绘图任务使用了不同的轴约定,但我很困惑为什么这会在绘制连续点时起作用,但在绘制两点之间的连接线时不起作用?

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

Imp*_*est 5

Matplotlib总是使用相同的约定,

plt.plot(x,y, ...)
Run Code Online (Sandbox Code Playgroud)

其中x为横坐标,y为纵坐标。这与您是否绘制点线无关。

你打电话时

plt.plot(15,15, 'y*')
plt.plot(35,15, 'b*')
Run Code Online (Sandbox Code Playgroud)

第一个点15的 x 坐标为 ,第二个点的 x 坐标为35。而当你调用 时plt.plot([15,15], [35,15], 'y-'),两个点的 x 坐标都是15
因此,有两点

x1 = 15; y1 = 15
x2 = 35; y2 = 15
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式绘制它们

plt.plot(x1,y1, 'y*')
plt.plot(x2,y2, 'b*')
Run Code Online (Sandbox Code Playgroud)

或者

plt.plot([x1,x2], [y1,y2], 'y-')
Run Code Online (Sandbox Code Playgroud)