Lit*_*Bee 3 r ggplot2 pie-chart stacked-chart
我想将这个附加图重现到多个饼图,其半径由总杂草重量定义.这是我使用的代码:
weedweights<-data%>%
select(-ends_with("No"))%>%
gather(key=species, value=speciesmass, DIGSAWt:POLLAWt)%>%
mutate(realmass= (10*speciesmass) / samplearea.m.2.)%>%
group_by(Rot.Herb, species)%>%
summarize(avgrealmass=mean(realmass, na.rm=TRUE))%>%
filter(avgrealmass != "NaN")%>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
ggplot(weedweights, aes(x=Rot.Herb, y=avgrealmass, fill=species, width=Rot.Herb)) +
geom_bar(position = "fill", stat="identity") +
facet_grid(Rot.Herb ~ .) +
coord_polar("y") +
theme(axis.text.x = element_blank())Run Code Online (Sandbox Code Playgroud)
我想要18个饼图,看起来像这样, 但得到了这个空白的情节.请查看问题所在.
这是堆积图表

在这里,您可以下载数据
这有很多问题.主要的一点是你+的地方错了,但即使修好了,你也必须考虑一些问题.
+前一行的末尾,而不是第一行的开头.否则第一行ggplot(...)看起来像一个完整的陈述(R如何知道下一行有+?)即ggplot(...) +在第一行,function_call(...) +在后续行上,所以R知道有一个延续.opts已弃用.请theme改用.theme_blank已弃用.请element_blank改用.avgrealmass1 ~ avgrealmass2,但你的图层中没有这些变量,你的数据框也没有.我不确定这是什么目的.width=kg.ha但weedweights没有kg.ha专栏.修复(或省略)这些问题会产生:
ggplot(weedweights, aes(x=Rot.Herb, y=avgrealmass, fill=species)) +#, width=kg.ha)) +
geom_bar(position = "fill", stat="identity") +
#facet_grid(avgrealmass1~avgrealmass2) +
coord_polar("y") +
theme(axis.text.x = element_blank())
Run Code Online (Sandbox Code Playgroud)

这看起来并不像你所追求的那样,但至少它解决了你的许多初步问题,现在你可以正确思考你想要绘制/刻面的内容,这样你就可以解决剩下的问题了.
编辑更新以响应OP完全改变原始问题...
这会做一个饼图Rot.Herb- >改变你facet_grid(Rot.Herb ~ .)的facet_wrap( ~ Rot.Herb).还要删除width=Rot.Herb原来的ggplot调用,因为如何将width(一个数字)映射到Rot.Herb(一个字符串)?还要注意aes(x=1...)- > x只是一个虚拟变量,无论它是什么.
ggplot(weedweights, aes(x=1, y=avgrealmass, fill=species)) +
geom_bar(position = "fill", stat="identity") +
facet_wrap(~ Rot.Herb) +
coord_polar("y") +
theme(axis.text.x = element_blank())
Run Code Online (Sandbox Code Playgroud)
现在你说你想要改变每个饼图的宽度除以它的总杂草重量(虽然你没有解释如何获得它,因为weedweights只有一列avgrealmass).
我会戴上我的思维阅读帽,并假设"总杂草重量"是每个"平均质量"的总和Rot.Herb(即每个物种的所有物种的总和Rot.Herb).如果不是,你已经能够自己计算这个专栏了(你已经证明你可以在你weedweight从原版计算出来时做到这一点data- 做得好).因此,您只需将此宽度列添加到您的weedweights:
ww2 <- weedweights %>%
group_by(Rot.Herb) %>%
mutate(totalweedweight=sum(avgrealmass)) %>%
ungroup()
Run Code Online (Sandbox Code Playgroud)
然后像以前一样使用ggplot进行以下更改:
width=totalweedweight:将宽度列添加到ggplot调用.x=totalweedweight/2:所有这一切确保每个饼图都是"左对齐",就像它一样,即馅饼是一个圆而不是一个戒指(保留它x=1,你会看到我的意思).
ggplot(ww2, aes(x=totalweedweight/2, y=avgrealmass, fill=species, width=totalweedweight)) +
geom_bar(position = "fill", stat="identity") +
facet_wrap(~ Rot.Herb) +
coord_polar("y") +
theme(axis.text.x = element_blank())
Run Code Online (Sandbox Code Playgroud)