使用Matplotlib从三列数据绘制RGB图谱

0 投票
1 回答
2627 浏览
提问于 2025-04-17 19:00

可以用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 个回答

1

griddata 是一个用来把不规则分布的数据转换成规则网格数据的函数(griddata 文档)。在你的情况下,看起来你已经有了网格上的数据,只需要调整一下形状。你遇到的错误是因为 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 进行转置、翻转或旋转,以获得你期望的方向。

撰写回答