如何绘制带有颜色十六进制作为 z 方向分量的热图(首选 plotly 或 ggplot)

How to plot a heatmap with a color hex as the z direction component (plotly or ggplot prefered)

我想绘制一个图形,其中我的第三维 (Z) 由由三个值组成的颜色十六进制定义。

我已经使用 rgb() 将三个值转换为十六进制。我现在有一个数据框,其中 x 和 y 值作为数字,z 列带有一堆十六进制值。

有没有办法创建一个图,其中每个点都由十六进制值着色,无论是通过在 plotly 中创建热图还是在 ggplot2 中使用 geom_raster/geom_tile。

如果有另一个我可以使用的包,那也很好。

这里有一些代码可以展示我到目前为止所做的事情

library(dplyr)
set.seed(1)

x <- c(1,1,1,2,2,2,3,3,3)
y <- c(1,2,3,1,2,3,1,2,3)
cap_1 <- runif(9,0,10)
cap_2 <- runif(9,0,10)
cap_3 <- runif(9,0,10)
df <- data.frame(x,y,cap_1,cap_2, cap_3)

我将容量(cap_1 转换为 cap_3)转换为百分比,然后根据百分比的原色创建一个颜色十六进制

df <- df %>%
    mutate(cap_sum = rowSums(df[3:5])) %>%
    mutate(cap_1_p = cap_1/cap_sum) %>%
    mutate(cap_2_p = cap_2/cap_sum) %>%
    mutate(cap_3_p = cap_3/cap_sum) %>%
    mutate(z = rgb(cap_1_p, cap_2_p,cap_3_p))

我尝试将其绘制为热图但未成功:

library(plotly)
fig <- plot_ly(df, x='x', y='y', z='z', 
           type = "heatmap")
fig

这是从 ggplotggplotly 的方法:

g <- ggplot(df, aes(x,y, fill = z)) + 
  geom_tile() +
  scale_fill_identity()
plotly::ggplotly(g)