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

时间:2018-10-16 19:32:18

标签: r ggplot2 plotly r-plotly

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

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

是否有一种创建图的方式,其中每个点都用十六进制值着色,无论是通过在图中创建热图还是在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

1 个答案:

答案 0 :(得分:0)

这是一种贯穿ggplot直至ggplotly的方法:

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

enter image description here