是否可以使用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))
非常感谢
答案 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 doc,imshow
doc。
您可能需要转置/翻转/旋转imshow(c, interpolation='none',
origin='bottom',
extent=[np.min(X), np.max(X), np.min(Y), np.max(Y)])
以获得您期望的方向。