【问题标题】:How to plot the variant circular bar chart in r with ggplot如何使用 ggplot 在 r 中绘制变体圆形条形图
【发布时间】:2020-06-24 13:29:23
【问题描述】:

我想绘制这样的图片,但我不知道如何用 R 绘制它。我在 website 上看到了一个教程,但这不是我需要的。它就像一个圆形条形图,只是下图中的每个条形都不是一个单一的值,而是一个系列值,表示不同年份的不同发病率。

下图是模板。

任何帮助将不胜感激!

我的假数据:

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"))

【问题讨论】:

  • 还是圆形热图?
  • 嗨@zhiweili,我认为如果您提供示例数据会有所帮助。我认为是否应该关闭这个问题有点边界。此外,我认为您应该解释您希望看到的内容,即它只是一个简单的圆形热图还是具有其他功能。这些细节很有帮助。
  • 对我来说,这是一个有效的问题,因为 ggplot2 中没有当前包可以像描述的 OP 那样做一个圆形热图
  • 嗨@StupidWolf,我的朋友。抱歉,我忘记发布我的虚假数据。现在我编辑我的问题。这张照片来自那里[ncbi.nlm.nih.gov/pmc/articles/PMC7114954/].它以圆形热图显示不同年份不同传染病发病率的描述。我想在我的数据中模仿他的图表。

标签: r ggplot2 plot graph


【解决方案1】:

这是一个圆形热图。很可能有包可以做到这一点。下面是 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))

假设mat 是我们的矩阵,那么我们进行长轴旋转并保留因子中的行和列顺序:

df = data.frame(mat) %>% 
rownames_to_column("row") %>% 
pivot_longer(-row) %>%
mutate(name=factor(name,levels=colnames(mat)),
row=factor(row,levels=rownames(mat)))

然后我们绘制,下面我添加了另一列来添加行名注释:

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") 

所以你有一个“提升”的热图。第一列是标签。目的是现在包装它并形成圆形热图:

g + coord_polar(start=-0.15) + theme_bw() + 
theme(legend.position = c(0.5, 0.5),legend.key.size = unit(0.2, "cm")) 

【讨论】:

  • 这是一个很好的答案。顺便说一句,我的朋友,你知道如何把图例卷起来放在情节的中间,就像我发布的模板一样。
  • 已编辑答案。你在 theme() 中使用 legend.position,数字是相对于情节的,所以 0.5,0.5 表示中心.. 我也不知道如何使图例圆形
  • 够了,非常感谢,这对我帮助很大!
  • 你好,朋友,又打扰你了,我还有一个问题。我想在每个单元格周围添加黑框。我尝试在aes() 内部或外部添加color = 'black',就像这样:ggplot(df,aes(x=name,y=as.numeric(row),fill=value, color = 'black'))(此代码在每个单元格周围添加橙色框并添加另一个图例)。 ggplot(df,aes(x=name,y=as.numeric(row),fill=value), color = 'black')(这段代码没有改变情节)。这两种情况都出乎我的意料。
  • stackoverflow.com/questions/32665431/…,你必须在 geom_tile(color="black") 中调用它
猜你喜欢
  • 2022-08-06
  • 1970-01-01
  • 2020-11-19
  • 2011-10-14
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2023-03-22
相关资源
最近更新 更多