Как построить тепловую карту с шестнадцатеричным цветом в качестве компонента направления z (предпочтительно plotg или ggplot) - PullRequest
0 голосов
/ 16 октября 2018

Я хочу построить фигуру, где мое третье измерение (Z) определяется шестнадцатеричным цветом, который определяется набором из трех значений.

Я уже преобразовал три значения в гекс, используя rgb ().Теперь у меня есть фрейм данных, который имеет значения x и y в виде чисел и столбец az с кучей шестнадцатеричных значений.

Есть ли способ создать график, на котором каждая точка окрашивается шестнадцатеричным значением, будь то путем создания тепловой карты на графике или с помощью geom_raster / geom_tile в ggplot2.

Если естьэто еще один пакет, который я мог бы использовать это тоже хорошо.

Вот некоторый код, чтобы показать, что я сделал до сих пор

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 голосов
/ 17 октября 2018

Вот подход, проходящий через ggplot и далее к ggplotly:

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

enter image description here

...