我有這個虛擬資料集:
dat <- data.frame(ID = c(1:8),
col1=c("A B",NA,NA,"B C","A C","A",NA,"C"),
col2=c("A D","B G",NA,NA,NA,NA,"E","C E"),
col3=c("A A A A",NA,"B B C B B",NA,NA,"A D","D C","C E"),
col4=c(NA,NA,NA,"B A B",NA,NA,NA,"E"),
row.names = c("row1","row2","row3","row4","row5","row6","row7","row8"))
我正在嘗試使用具有唯一顏色的分類變數 A、B、C、D、E、G 制作此資料框的熱圖。如果一個單元格只有一個值,那么繪制熱圖會很容易。這將是代碼:
dat <- dat %>% gather(key = "variable", value = "value", col1:col4)
ggplot(dat3, aes(variable, ID)) geom_tile(aes(fill = value))
但由于存在不止一個值,而且在某些單元格中,這些值甚至會重復,因此很難對其進行編碼。為了在同一個單元格中繪制超過 2 個變數,我正在考慮將單元格分成 2 個三角形,上面的三角形根據一個值著色,另一個根據第二個值著色不同。任何人都可以幫助如何編碼嗎?
在 excel 中,所需的情節看起來像這個原始影像
uj5u.com熱心網友回復:
正如我在評論中已經提到的,Allan 參考的答案是恕我直言,這是實作您想要的結果的方法。但是,要使代碼正常作業,需要一步來將您的資料轉化為正確的形狀,即通過創建“A B”等類別的組合來處理復雜的事情。但這可以使用 eg 來解決tidyr::separate_rows。并且通過一些重命名艾倫的代碼無需任何調整即可作業,至少恕我直言,接近您添加為影像的所需結果。
library(ggplot2)
library(tidyr)
library(dplyr)
dat3 <- dat %>%
gather(key = "variable", value = "value", col1:col4) |>
separate_rows(value)
# Rename dataset and variables
df <- dat3 %>%
dplyr::rename(x = variable, y = ID, group = value)
# https://stackoverflow.com/a/71148281/12993861
df1 <- df[!duplicated(interaction(df$x, df$y)),]
df2 <- df[duplicated(interaction(df$x, df$y)),]
df2 <- df[rep(seq(nrow(df)), each = 3),]
df2$x1 <- as.numeric(as.factor(df2$x))
df2$y1 <- as.numeric(as.factor(df2$y))
df2$x1 <- df2$x1 c(-0.5, 0.5, 0.5)
df2$y1 <- df2$y1 c(-0.5, -0.5, 0.5)
df2$z <- rep(seq(nrow(df2)/3), each = 3)
ggplot(df1, aes(x = x, y = y, fill = group))
geom_tile()
geom_polygon(data = df2, aes(x = x1, y = y1, group = z), size = 0)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468220.html
