zhi*_* li 2 plot r graph ggplot2
我想绘制这样的图片,但我不知道如何用 R 绘制它。我在这个网站上看到了一个教程,但这不是我需要的。它就像一个圆形条形图,不同之处在于,在下图中,每个条形都不是单个值,而是一个系列值,表示不同年份的不同发生率。
下图中是模板。
任何帮助将不胜感激!
我的假数据:
structure(list(year = c(2010, 2011, 2012, 2010, 2011, 2012, 2010,
2011, 2012, 2010, 2011, 2012), disease = c(1, 1, 1, 2, 2, 2,
3, 3, 3, 4, 4, 4), group = c("A", "A", "A", "A", "A", "A", "B",
"B", "B", "B", "B", "B"), incidence = c(0.2, 0.3, 0.4, 0.1, 0.3,
0.2, 0.5, 0.6, 0.7, 0.8, 0.9, 0.3)), row.names = c(NA, -12L), class = c("tbl_df",
"tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)
这是一个圆形热图..很可能有这样做的包。下面就像是在 ggplot2 中的快速尝试:
library(ggplot2)
library(tidyr)
library(dplyr)
library(tibble)
mat = matrix(runif(200),10,20)
colnames(mat) = paste0("col",1:ncol(mat))
rownames(mat) = paste0("row",1:nrow(mat))
Run Code Online (Sandbox Code Playgroud)
假设mat是我们的矩阵,然后我们旋转 long 并保留因子中的行和列顺序:
df = data.frame(mat) %>%
rownames_to_column("row") %>%
pivot_longer(-row) %>%
mutate(name=factor(name,levels=colnames(mat)),
row=factor(row,levels=rownames(mat)))
Run Code Online (Sandbox Code Playgroud)
然后我们绘图,下面我添加了另一列来添加行名称注释:
row_num = length(levels(df$row))
g = ggplot(df,aes(x=name,y=as.numeric(row),fill=value)) +
xlim(c("",colnames(mat))) + ylim(c(-row_num/1.5,row_num+1))+
geom_tile()+ ylab("")+
annotate(x="",y=1:row_num,label=levels(df$row),size=2.5,geom="text")
Run Code Online (Sandbox Code Playgroud)
所以你有一个“高架”热图。第一列是标签。现在的目的是包装它并形成圆形热图:
g + coord_polar(start=-0.15) + theme_bw() +
theme(legend.position = c(0.5, 0.5),legend.key.size = unit(0.2, "cm"))
Run Code Online (Sandbox Code Playgroud)