Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我有一个矩阵,其中每个元素都是一个标签和一个值。如何表示它,以便标签给出颜色和强度值?_Python_Image_Matplotlib - Fatal编程技术网

Python 我有一个矩阵,其中每个元素都是一个标签和一个值。如何表示它,以便标签给出颜色和强度值?

Python 我有一个矩阵,其中每个元素都是一个标签和一个值。如何表示它,以便标签给出颜色和强度值?,python,image,matplotlib,Python,Image,Matplotlib,我有一个列表,如下所示: [[[0, 1], [0, 7], [1, 6], [0, 5], [0, 5]] [[0, 1], [1, 6], [1, 5], [1, 4], [0, 3]] [[1, 1], [1, 5], [1, 4], [1, 3], [1, 2]] [[0, 1], [1, 4], [1, 3], [1, 2], [0, 8]] [[0, 1], [0, 5], [1, 4], [0, 3], [0, 3]]] 如何表

我有一个列表,如下所示:


    [[[0, 1], [0, 7], [1, 6], [0, 5], [0, 5]]
     [[0, 1], [1, 6], [1, 5], [1, 4], [0, 3]]
     [[1, 1], [1, 5], [1, 4], [1, 3], [1, 2]]
     [[0, 1], [1, 4], [1, 3], [1, 2], [0, 8]]
     [[0, 1], [0, 5], [1, 4], [0, 3], [0, 3]]]

如何表示它,使第一个数字表示颜色,第二个数字表示颜色的强度?

该函数可用于从转换为rgb值

色调
决定颜色
hsv_to_rgb
希望其参数从0到1,并且
hue
是一个圆形比例,因此0和1映射到相同的颜色(红色)。0.5将是相反的颜色(青色)

From:
尺寸,类似于这些油漆与不同数量的黑色或白色油漆的混合物。只需将给定值除以最大值,即可得到0-1范围内的所有值。也可以进行其他转换,例如
1-value/8
。您可能还希望避免非常暗的颜色,例如通过添加一些常量,例如:
(value+4)/(numValues+4)

饱和度
控制“全色”(1)和等效灰度值(0)之间的范围

如果没有太多的类和值,甚至可以为自定义图例留出空间

下面的代码假设类从0开始编号,值从1开始编号

从matplotlib导入pyplot作为plt
从matplotlib.colors将hsv_导入_rgb
img=[[0,1],[0,7],[1,6],[0,5],[0,5],
[[0, 1], [1, 6], [1, 5], [1, 4], [0, 3]],
[[1, 1], [1, 5], [1, 4], [1, 3], [1, 2]],
[[0, 1], [1, 4], [1, 3], [1, 2], [0, 8]],
[[0, 1], [0, 5], [1, 4], [0, 3], [0, 3]]]
numclass=2#编号为0,1,。。。
数值=8#编号为1,2,3,。。。
img_rgb=[[hsv_to_rgb((色调/亮度等级,1,值/亮度值))
对于色调,行中的值]
对于img中的行]
plt.imshow(img_rgb,interpolation='none')
legend_handles=[Patch(facecolor='none'如果值==0,则为hsv_至_rgb((色调/numclass,1,值/numvalue)),
edgecolor='none',
label=f'Class{hue}如果值==0,则为f'V{value}')
对于范围内的色调(numClasses),对于范围内的值(0,numValues+1)]
plt.legend(handles=legend\u handles,ncol=numclass,loc='左上角',bbox\u to\u anchor=[1,1])
plt.子图_调整(右=0.7)#额外空间以适合图例
plt.show()

请更详细地解释您想要实现的目标。是否要将列表转换为和图像?您可能需要在internet上查找颜色编码。特别是,不清楚如何将单个数字(而不是RGB值)转换为颜色。好的,我想要类似热图的东西,但颜色由标签决定。您可以使用字典将第一个索引映射到任意颜色,根据其
色调和
饱和度定义,并根据索引的可能最小值和最大值,使用第二个索引来计算
,其中
色调
饱和度
作为
hsv
中的术语,即色调-饱和度值-颜色模型。如果这是您想要做的,我可以帮助实现…我想用它来表示SOM矩形映射。饱和度可以是所有测试的标准值。但是我不知道怎么用字典来解释。IIUC,OP说“所以第一个数字代表颜色”。。。所以我假设,这会产生二元颜色,因为如果你选择每个子列表的第一个元素,你只能得到0和1。理想的图形是一个二值彩色贴图,其中每个像素/方框的alpha值(强度)等于子列表的第二个元素。我的答案只是建议如何将给定的元组转换为rgb图像。
hsv
v
与黑色或白色背景上的alpha具有类似的效果。OP可以自由地进行更多的变化,尤其是将结果与期望的结果进行比较。目前尚不清楚这些数字的确切用途和意义。我们也不知道这个例子是否显示了所有期望的可能性。这就是我所想的。非常感谢。所以,如果我有更多的类或更多的值,它将是hsv_到rgb(色调/numclass,1,值/numvalue)。嘿!所以我在代码中添加了这个实现,但是我得到了这样一个“使用RGB数据将输入数据剪裁到imshow的有效范围([0..1]表示浮点或[0..255]表示整数)”,我不知道如何修复它。再次查看您的数据,我看到您的值从
1
numValues
,而不是从
0
numValues-1
。因此,这里您应该除以
numValues
,以确保结果介于0和1之间。或者执行
(值-1)/(numValues-1)