如何绘制颜色列表?
How can I plot a list of colors?
您好,我正在尝试按以下格式绘制颜色列表:
img = cv2.imread('./img/a.png')
ground = cv2.imread('./img/b.png')
descriptor = [img[ij] for ij in np.ndindex(ground.shape[:2]) if all(ground[ij])]
descriptor[0]
array([ 72, 70, 115], dtype=uint8)
我想要这样的图表:
为了做到这一点,我使用了以下方式的散点图:
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")
axis.scatter(descriptor[0],descriptor[0],descriptor[0], facecolors=descriptor, marker=".")
plt.show()
但我收到以下错误:
ValueError: 'c' argument must be a mpl color, a sequence of mpl colors
or a sequence of numbers, not [array([ 72, 70, 115]
但是如果我像这样更改颜色列表:
descriptor = [list(img[ij]) for ij in np.ndindex(ground.shape[:2]) if all(ground[ij])]
descriptor[0]
[ 72, 70, 115]
我收到这个错误:
'c' argument must be a mpl color, a sequence of mpl colors or a
sequence of numbers, not [[72, 70, 115], [71, 69, 114]
我怎样才能像图表一样绘制列表?
谢谢
a = [np.random.randint(10,240,3) for _ in range(20)]
descriptor = a
假设描述符是一个二维数组,由每个点的 [r,g,b] 值组成:
您在 scatter() 函数中为所有 3 个 x、y、z 参数给出了每个点的所有 3 个坐标。您需要访问 descriptor[:,0], descriptor[:,1], descriptor[:,2]
而不是 descriptor[0], descriptor[0], descriptor[0]
分别用于 x、y 和 z 坐标的用户 r、g 和 b 值。
Matplotlib 接受 r,g,b 值的二维元组数组作为颜色,但它们必须在 [0,1] 范围内,因此 color = descirptor/255
这是我的代码:
color = descriptor/255
fig = plt.figure()
axis = fig.add_subplot(111, projection = '3d')
axis.scatter(descriptor[:,0],descriptor[:,1],descriptor[:,2], facecolor = color, marker = 'o')
axis.set_xlim(0,255)
axis.set_ylim(0,255)
axis.set_zlim(0,255)
样本数据为:
descriptor = np.array([[70,70,115],[112,255,95],[0,0,0],[255,255,255],[125,125,125],[255,0,0],[0,255,0],[0,0,255],[255,255,0],[0,255,255],[255,0,255]])
输出:
编辑: 给定您的示例数据
a = [np.random.randint(10,240,3) for _ in range(20)]
descriptor = a
您需要先将 a 的数据类型更改为 numpy 数组(以使用多维索引),因此:
descriptor = numpy.array(a)
您好,我正在尝试按以下格式绘制颜色列表:
img = cv2.imread('./img/a.png')
ground = cv2.imread('./img/b.png')
descriptor = [img[ij] for ij in np.ndindex(ground.shape[:2]) if all(ground[ij])]
descriptor[0]
array([ 72, 70, 115], dtype=uint8)
我想要这样的图表:
为了做到这一点,我使用了以下方式的散点图:
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")
axis.scatter(descriptor[0],descriptor[0],descriptor[0], facecolors=descriptor, marker=".")
plt.show()
但我收到以下错误:
ValueError: 'c' argument must be a mpl color, a sequence of mpl colors or a sequence of numbers, not [array([ 72, 70, 115]
但是如果我像这样更改颜色列表:
descriptor = [list(img[ij]) for ij in np.ndindex(ground.shape[:2]) if all(ground[ij])]
descriptor[0]
[ 72, 70, 115]
我收到这个错误:
'c' argument must be a mpl color, a sequence of mpl colors or a sequence of numbers, not [[72, 70, 115], [71, 69, 114]
我怎样才能像图表一样绘制列表?
谢谢
a = [np.random.randint(10,240,3) for _ in range(20)]
descriptor = a
假设描述符是一个二维数组,由每个点的 [r,g,b] 值组成:
您在 scatter() 函数中为所有 3 个 x、y、z 参数给出了每个点的所有 3 个坐标。您需要访问
descriptor[:,0], descriptor[:,1], descriptor[:,2]
而不是descriptor[0], descriptor[0], descriptor[0]
分别用于 x、y 和 z 坐标的用户 r、g 和 b 值。Matplotlib 接受 r,g,b 值的二维元组数组作为颜色,但它们必须在 [0,1] 范围内,因此
color = descirptor/255
这是我的代码:
color = descriptor/255
fig = plt.figure()
axis = fig.add_subplot(111, projection = '3d')
axis.scatter(descriptor[:,0],descriptor[:,1],descriptor[:,2], facecolor = color, marker = 'o')
axis.set_xlim(0,255)
axis.set_ylim(0,255)
axis.set_zlim(0,255)
样本数据为:
descriptor = np.array([[70,70,115],[112,255,95],[0,0,0],[255,255,255],[125,125,125],[255,0,0],[0,255,0],[0,0,255],[255,255,0],[0,255,255],[255,0,255]])
输出:
编辑: 给定您的示例数据
a = [np.random.randint(10,240,3) for _ in range(20)]
descriptor = a
您需要先将 a 的数据类型更改为 numpy 数组(以使用多维索引),因此:
descriptor = numpy.array(a)