我正在嘗試在熱圖的每個單元格上添加一個數字標簽。因為它還需要邊際條形圖,所以我嘗試了兩個包。iheatmapr 和 ComplexHeatmap。
(第一次嘗試)iheatmapr 可以很容易地添加到下面的添加欄,但我看不到如何在單個單元格的熱圖中添加標簽。
library(tidyverse)
library(iheatmapr)
library(RColorBrewer)
in_out <- data.frame(
'Economic' = c(2,1,1,3,4),
'Education' = c(0,3,0,1,1),
'Health' = c(1,0,1,2,0),
'Social' = c(2,5,0,3,1) )
rownames(in_out) <- c('Habitat', 'Resource', 'Combined', 'Protected', 'Livelihood')
GreenLong <- colorRampPalette(brewer.pal(9, 'Greens'))(12)
lowGreens <- GreenLong[0:5]
in_out_matrix <- as.matrix(in_out)
main_heatmap(in_out_matrix, colors = lowGreens)
in_out_plot <- iheatmap(in_out_matrix,
colors=lowGreens) %>%
add_col_labels() %>%
add_row_labels() %>%
add_col_barplot(y = colSums(bcio)/total) %>%
add_row_barplot(x = rowSums(bcio)/total)
in_out_plot
然后使用: save_iheatmap(in_out_plot, "iheatmapr_test.png") 因為我不能將 ggsave(device = ragg::agg_png etc) 與 iheatmapr 物件一起使用。

此外,iheatmapr 物件與 ggsave() 明顯不兼容(也許我錯了)對我來說是個問題,因為我通常使用 ragg 包匯出影像 AGG 以保留字體大小。我懷疑其他一些熱圖包制作的自定義物件可能與拼湊和 ggsave 不兼容。
ggsave("png/iheatmapr_test.png", plot = in_out_plot,
device = ragg::agg_png, dpi = 72,
units="in", width=3.453, height=2.5,
scaling = 0.45)
(第二次嘗試)ComplexHeatmap 可以很容易地在熱圖中標記單個數字“單元格”,并且還在其“注釋”中提供邊緣條,我已經嘗試過了,但是它的調色板系統(它使用整數來指代一組顏色)不適合我的 RGB 矢量顏色漸變,總體而言,它是一個復雜的包,顯然旨在使圖形比我正在做的更高級。
我的目標是如下面的螢屏截圖示例所示的樣式,它是在 Excel 中制作的。

請任何人都可以為像這樣的簡單熱圖建議一個更合適的 R 包,里面有邊欄和數字標簽?
uj5u.com熱心網友回復:
與其依賴提供開箱即用解決方案的軟體包,實作所需結果的一種選擇是使用從頭開始創建繪圖ggplot2,patchwork這使您可以更好地控制繪圖的樣式、添加標簽等。
注意:問題iheatmapr在于它回傳一個plotly物件,而不是 ggplot。這就是為什么你不能使用ggsave。
library(tidyverse)
library(patchwork)
in_out <- data.frame(
'Economic' = c(1,1,1,5,4),
'Education' = c(0,0,0,1,1),
'Health' = c(1,0,1,0,0),
'Social' = c(1,1,0,3,1) )
rownames(in_out) <- c('Habitat', 'Resource', 'Combined', 'Protected', 'Livelihood')
in_out_long <- in_out %>%
mutate(y = rownames(.)) %>%
pivot_longer(-y, names_to = "x")
# Summarise data for marginal plots
yin <- in_out_long %>%
group_by(y) %>%
summarise(value = sum(value)) %>%
mutate(value = value / sum(value))
xin <- in_out_long %>%
group_by(x) %>%
summarise(value = sum(value)) %>%
mutate(value = value / sum(value))
# Heatmap
ph <- ggplot(in_out_long, aes(x, y, fill = value))
geom_tile()
geom_text(aes(label = value), size = 8 / .pt)
scale_fill_gradient(low = "#F7FCF5", high = "#00441B")
theme(legend.position = "bottom")
labs(x = NULL, y = NULL, fill = NULL)
# Marginal plots
py <- ggplot(yin, aes(value, y))
geom_col(width = .75)
geom_text(aes(label = scales::percent(value)), hjust = -.1, size = 8 / .pt)
scale_x_continuous(expand = expansion(mult = c(.0, .25)))
theme_void()
px <- ggplot(xin, aes(x, value))
geom_col(width = .75)
geom_text(aes(label = scales::percent(value)), vjust = -.5, size = 8 / .pt)
scale_y_continuous(expand = expansion(mult = c(.0, .25)))
theme_void()
# Glue plots together
px plot_spacer() ph py plot_layout(ncol = 2, widths = c(2, 1), heights = c(1, 2))

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435060.html
上一篇:為什么當我讓它顯示百分比時我不能為我的條形圖著色?[復制]
下一篇:將圖例添加到基于圖的誤差條顏色
