使用Matplotlib从三列数据绘制RGB映射

时间:2013-03-13 20:54:53

标签: python colors matplotlib rgb

是否可以使用Matplotlib绘制RGB值的地图?

我从以下形式的文本文件中读取了三列数据,其中x和y是所需的坐标,z是在给定坐标处绘制的所需rgb颜色的十六进制字符串:

x   y   z 
1 0.5 #000000
2 0.5 #FF0000
3 0.5 #00FF00
1 1.5 #0000FF
2 1.5 #FFFF00
3 1.5 #00FFFF
1 1.5 #FF00FF
2 2.5 #C0C0C0
3 2.5 #FFFFFF

这是我目前的代码状态。 griddata()函数抛出错误:

import pandas as pds
import matplotlib.pyplot as plt

# Import text file using pandas
datafile = pds.read_csv(PathToData,sep='\t')

X=datafile.x
Y=datafile.y
Z=datafile.z

# Generate mesh as 'numpy.ndarray' type for plotting
# This throws the following error:
# ValueError: could not convert string to float: #FFAA39
Z=griddata(X, Y, Z, unique(X), unique(Y))

非常感谢

1 个答案:

答案 0 :(得分:1)

griddata是用于将不均匀间隔的数据插入网格(griddata doc)的函数。在您的情况下,看起来您已经在网格上有数据,您只需要重塑它。你得到的错误是因为griddata试图将你的颜色十六进制代码转换为浮点数进行插值,你应该得到它,因为没有合理的浮动间隔{{1 }}

#00FF00

data_dims = (3, 3) # or what ever your data really is X = np.asarray(x).reshape(data_dims) Y = np.asarray(y).reshape(data_dims) C = np.asarray([mpl.colors.colorConverter.to_rgb(_hz) for _hz in z]).reshape(data_dims + (3,)) # the colors converted to (r, g, b) tuples 调用是为了确保我们有数组,而不是数据框。

如果您只想查看数组,我们可以使用asarray来绘制它:

imshow

color converter docimshow doc。

您可能需要转置/翻转/旋转imshow(c, interpolation='none', origin='bottom', extent=[np.min(X), np.max(X), np.min(Y), np.max(Y)]) 以获得您期望的方向。