如何绘制带有颜色十六进制作为 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
这是从 ggplot
到 ggplotly
的方法:
g <- ggplot(df, aes(x,y, fill = z)) +
geom_tile() +
scale_fill_identity()
plotly::ggplotly(g)
我想绘制一个图形,其中我的第三维 (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
这是从 ggplot
到 ggplotly
的方法:
g <- ggplot(df, aes(x,y, fill = z)) +
geom_tile() +
scale_fill_identity()
plotly::ggplotly(g)