使用 RGB 值和坐标绘制 Pandas DataFrame

问题描述 投票:0回答:1

我有一个 pandas DataFrame,其中包含

["x", "y", "r", "g", "b"]
列,其中 x 和 y 表示像素的坐标,r、g、b 表示其 RGB 值。这些行包含像素网格的每个坐标的条目并且是唯一的。如何使用 matplotlibs 的
imshow()
显示此 DataFrame?这需要将数据重塑为形状为
(M, N, 3)
的数组。

我通常使用

plt.imshow(df.pivot(columns="x", index="y", values="i"), interpolation="nearest")
的方法仅适用于灰度图像。将
["r", "g", "b"]
作为值参数会生成一个以 MultiIndex 作为列的 DataFrame。但是我无法将其转换为正确的图像。只需调用
.reshape(M, N, 3)
就会创建错误的图像。

我也有用

df["rgb"] = list(zip(df.r, df.g, df.b))
创建一个新列的想法,但是我不确定如何将生成的元组转换为 ndarray 的新轴。

python pandas dataframe matplotlib imshow
1个回答
0
投票

有一种简单的方法可以做到这一点。首先,使用

df = df.sort_values(by=['x', 'y'])
确保 DataFrame 按 x 和 y 值排序。

接下来,通过调用

df[['r', 'g', 'b']]
从 DataFrame 中仅选择 r、g 和 b 的三列。您可以通过调用
df[['r', 'g', 'b']].values
将这些值转换为 numpy 数组,这将返回形状为
(M*N, 3)
的数组,假设
M
N
是图像的宽度和高度。 现在,将该数组重塑为
(M, N, 3)
形状,就完成了。

df = df.sort_values(by=['x', 'y'])
values = df[['r', 'g', 'b']].values
image = values.reshape(df['x'].max() + 1 , df['y'].max() + 1, 3)

我在这里假设 DataFrame 中的 x 和 y 值从 0 开始,因此我为维度添加 1。如果您的 x 和 y 值从 1 开始,则可以像这样完成重塑

(df['x'].max(), df['y'].max(), 3)

© www.soinside.com 2019 - 2024. All rights reserved.