为ggplot中的两个不同列制作并排饼图,也针对不同因素对其进行分面包装]]

问题描述 投票:0回答:1

我正在尝试为我拥有的数据矩阵制作一些饼图。我在下面用类似的变量创建了一个虚拟矩阵。我有两个要使用的结果值是“ AREA”和“ EROSION”。对于每个结果值,我可以具有以下三个因素之一:“高沉淀区”,“中等沉淀区”和“低沉淀区”。

我想以3行2列的饼图显示。每行每个区域都需要具有“面积”饼图和“侵蚀”饼图。我可以通过添加facet_wrap(~Zones)来分隔饼图,但是我不确定如何用两个不同的列来分隔饼图?这样我就可以在每一行中并排显示“侵蚀”饼图和“面积”饼图。

而且我的原始矩阵每行最多可以有15个值,这意味着饼图将变得拥挤。有没有一种方法或一种简单的功能可以使用0或低于特定阈值的忽略值?

我将非常感谢您对此提供的帮助和建议。

library(tidyverse)
library(RColorBrewer)
my_pal <- colorRampPalette(brewer.pal(9, "Set1"))

#### create new matrix ############
new_mat<-matrix(, nrow=40, ncol = 4)
colnames(new_mat)<-c("Zones", "ssoilcmb", "Erosion_t", "area..sq.m.")


for ( i in 1:nrow(new_mat)){ 
  new_mat[i,4]<-as.numeric(sample(0:20, 1))
  new_mat[i,3]<-as.numeric(sample(0:20, 1))
  a<-sample(c("S2","S3","S4","S5","S1"),1)
  b<-sample(c("Deep","Moderate","Shallow"),1)
  new_mat[i,1]<-sample(c("High Precip","Moderate Precip","Low Precip"),1)

  new_mat[i,2]<-paste0(a,"_",b)
}

m_dt<-as.data.frame(new_mat)
m_dt$Erosion_t<-as.numeric(m_dt$Erosion_t)
m_dt$area..sq.m.<-as.numeric(m_dt$area..sq.m.)

#### calculate parea
m_dt<- m_dt %>%
  group_by(Zones)%>%
  mutate(per_er=signif((`Erosion_t`/sum(`Erosion_t`))*100,3), per_area=signif((`area..sq.m.`/sum(`area..sq.m.`))*100,3))

############ plot 
 ggplot(m_dt, aes(x="", y=per_er, fill=ssoilcmb)) + geom_bar(stat="identity", width=1, position = position_fill())+
  coord_polar("y", start=0) + facet_wrap(~ Zones) +geom_text_repel(aes(label = paste0(per_er, "%")), position = position_fill(vjust = 0.5))+
  scale_fill_manual(values=my_pal(15)) +
  labs(x = NULL, y = NULL, fill = NULL, title = "Erosions")+
  theme_classic() + theme(axis.line = element_blank(),
                          axis.text = element_blank(),
                          axis.ticks = element_blank(),
                          plot.title = element_text(hjust = 0.5, color = "#666666"))


    

我正在尝试为我拥有的数据矩阵制作一些饼图。我在下面用类似的变量创建了一个虚拟矩阵。我有两个要使用的结果值是“ AREA”和“ EROSION”。对于...

r ggplot2 pie-chart
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.