如何使用 ggplot 在 r 中绘制变体圆形条形图

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)

在此处输入图片说明

Stu*_*olf 5

这是一个圆形热图..很可能有这样做的包。下面就像是在 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)

在此处输入图片说明