0

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

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

xyz 
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))

非常感谢

4

1 回答 1

1

griddata是用于将不均匀间隔的数据插入到网格 ( griddata doc ) 上的函数。在您的情况下,看起来您已经在网格上有数据,您只需要重塑它。你得到的错误是因为griddata试图将你的颜色十六进制代码转换为插值的浮点数,你应该得到它,因为#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用来绘制它的数组:

imshow(c, interpolation='none', 
       origin='bottom', 
       extent=[np.min(X), np.max(X), np.min(Y), np.max(Y)])

颜色转换器文档imshow文档。

您可能需要转置/翻转/旋转C以获得您期望的方向。

于 2013-03-14T12:54:16.590 回答