如何使用ggplot2绘制带有(x,y,r,g,b)坐标的图像?

5

我有一个数据框 image.rgb,其中我加载了每个图像坐标的 r、g、b 值(使用 jpegreshape 软件包)。它现在看起来像这样:

> head(image.rgb)
   y x         r         g         b
1 -1 1 0.1372549 0.1254902 0.1529412
2 -2 1 0.1372549 0.1176471 0.1411765
3 -3 1 0.1294118 0.1137255 0.1176471
4 -4 1 0.1254902 0.1254902 0.1254902
5 -5 1 0.1254902 0.1176471 0.1294118
6 -6 1 0.1725490 0.1372549 0.1176471

现在我想使用ggplot2绘制这个“图像”。 我可以通过以下方式绘制一个特定的“通道”(红色或绿色或蓝色):

ggplot(data=image.rgb, aes(
            x=x, y=y,
            col=g) #green for example
       ) + geom_point()

...默认的ggplot2颜色比例尺

有没有一种方式可以指定从我指定的列中获取精确的rgb值?

使用base包中的plot函数,我可以使用

with(image.rgb, plot(x, y, col = rgb(r,g,b), asp = 1, pch = "."))

但我希望能够使用ggplot2来实现这一点


为了澄清数据框的结构,在图像坐标范围内的每个(x,y)将恰好有一个数据框条目(不多也不少)。 - user2175594
ggplot(data=image.rgb, aes(x=x, y=y, col=rgb(r,g,b))) + geom_point()有什么问题吗?在这里似乎可以工作... - juba
@juba rgb(r,g,b) 创建一个字符串值,当传递给 col 参数时,ggplot2 会分配一个任意颜色,而不是其中指示的实际 rgb 颜色。 - user2175594
1
啊,是的,你说得对。 - juba
1个回答

10

为使颜色按照原来的状态被使用,您必须添加scale_color_identity

ggplot(data=image.rgb, aes(x=x, y=y, col=rgb(r,g,b))) + 
    geom_point() + 
    scale_color_identity()

您提供的示例数据给出非常相似的颜色,因此所有点似乎都是黑色的。使用 geom_tile ,不同的颜色更加明显:

您提供的样本数据给出非常相似的颜色,因此所有点看起来都是黑色的。使用 geom_tile 函数可以使不同的颜色更加明显:

ggplot(data=image.rgb, aes(x=x, y=y, fill=rgb(r,g,b))) +
    geom_tile() +
    scale_fill_identity()

在此输入图像描述


3
geom_raster() 是另一个值得考虑的选项。 - bdemarest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接