用ggplot覆盖甜甜圈图和

时间:2013-09-12 16:59:59

标签: r for-loop ggplot2

我最近开始使用R而且我一直在尝试使用ggplot来绘制带有几个甜甜圈的图形。 我受到以下问题的启发 - ggplot Donut chart但我想用for循环创建几个环。

我构建了一个测试数据框,如下所示:

library(ggplot2)

# Create test data.
rings<-data.frame(cat=c("A", "B", "C","D","E"), ring1=c(10, 60, 3, 70,5), ring2=c(20,30,8,15,1), ring3=c(5,40,80,22,10), ring4=c(10,60,16,25,20) )

for (y in 2:5){
# Add addition columns, needed for drawing with geom_rect.
rings[[y]] =  rings[[y]] / sum(rings[[y]])
rings[[y]] = cumsum(rings[[y]])
}

我使用以下代码构建了第一个甜甜圈:

max<-4.5
min<-4

plot = ggplot(rings, aes(fill=cat, ymax=rings[[2]], ymin=c(0, head(rings[[2]], n=-1)), xmax=max, xmin=min)) +
geom_rect() +
coord_polar(theta="y") +
xlim(c(0, 10)) +
theme_bw() +
theme(panel.background = element_rect(fill = NA)) +
theme(panel.grid=element_blank()) +
theme(axis.text=element_blank()) +
theme(axis.ticks=element_blank()) +
labs(title="Customized ring plot")

如果我在没有for循环的情况下编写代码,一切正常并且环很好地堆叠,可以看出环与其他环明显不同。

plot <- plot + geom_rect(data=rings, xmax=max, xmin=min, aes(ymax=rings[[2]], ymin=c(0,   head(rings[[2]], n=-1))))
min<-max
max<-max+0.5
plot <- plot + geom_rect(data=rings, xmax=max, xmin=min, aes(ymax=rings[[3]], ymin=c(0,     head(rings[[3]], n=-1))))
min<-max
max<-max+0.5
plot <- plot + geom_rect(data=rings, xmax=max, xmin=min, aes(ymax=rings[[4]], ymin=c(0, head(rings[[4]], n=-1))))
min<-max
max<-max+0.5
plot <- plot + geom_rect(data=rings, xmax=max, xmin=min, aes(ymax=rings[[5]], ymin=c(0,  head(rings[[5]], n=-1))))

print(plot)

当我对for循环进行编码时,前3个环对于类别具有相同的分布,并且只有第四个和最后一个是不同的。

for (y in 3:5){
plot <- plot + geom_rect(data=rings, xmax=max, xmin=min, aes(ymax=rings[[y]], ymin=c(0, head(rings[[y]], n=-1))))
min<-max
max<-max+0.5
} 
print(plot)

我尝试了不同的方法,但我似乎无法看到问题。我想我正在实现print()命令。我也尝试将ggplots转换为ggtables,受到以下问题的启发 - Overlaying two graphs using viewports但仅适用于2 ggplots(或者至少我不能向ggtable添加更多信息)。

很抱歉,如果这是一个重复的帖子,但我昨天和今天都在尝试实施其他几个选项,但似乎都没有。

0 个答案:

没有答案