当我在图像上按顺序绘制点时,它们会按预期显示:
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)
但是当我尝试在这两点之间绘制一条线时,似乎使用了不同的轴约定:
plt.plot([15,15], [35,15], 'y-')
plt.imshow(image)
如果我在行中指定一个点数组,它可以正常工作:
line_x = np.array(range(15,35))
line_y = np.repeat(15, 20)
plt.plot(line_x, line_y, 'y-')
plt.imshow(image)
我猜matplotlib正在为这些绘图任务使用不同的轴约定,但我很困惑为什么在绘制连续点时这会起作用,而不是在绘制两点之间的连接线时?
context:我正在使用skimage.measure.profile_line http://scikit-image.org/docs/dev/api/skimage.measure.html执行linecans。您可以使用此功能指定线扫描的开始和停止,但我想直观地演示我的线扫描在我的图像中的位置。
答案 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-')