首页 > 解决方案 > 如何在图中制作包含两个因子变量和 % 的饼图

问题描述

如何将此条形图转换为饼图?

这是我的条形图:

在此处输入图像描述

这是我用来制作条形图的代码:

dados_gráfico_distrito <- dados_desde_2015 %>%   
  filter(!is.na(qsd_distrito_nascimento_rec)) %>%
  group_by(anoletivo_cat) %>%
  count(anoletivo_cat, qsd_distrito_nascimento_rec) %>%
  mutate(pct = n / sum(n), pct_label = scales::percent(pct, accuracy=1)) 

dados_gráfico_distrito$qsd_distrito_nascimento_rec <- factor(dados_gráfico_distrito$qsd_distrito_nascimento_rec, levels = c("Other", "Porto", "Braga")) 

ggplot(dados_gráfico_distrito, aes(x= anoletivo_cat, fill = qsd_distrito_nascimento_rec, y = pct)) +
  geom_bar(position = "fill", stat="identity", width = 0.5) + 
  geom_text(aes(label = paste(pct_label), y = pct), position = position_fill(vjust = 0.5), colour = "black", size = 3.2) +
  scale_y_continuous(labels = scales::percent) +
  labs(y = " ", x = " ", fill=" ") +
  theme_void() + scale_fill_brewer(palette="Paired") + 
  theme(legend.text = element_text(size = 8, colour = "black")) + 
  theme(axis.text = element_text(size = 8, colour = "black")) + 
  theme(legend.position = "bottom", legend.direction = "horizontal") + 
  guides(fill = guide_legend(reverse=TRUE)) + 
  theme(plot.margin = unit(c(1, 1, 1, 1), "cm")) + 
  theme(panel.grid = element_line(colour="grey90")) + 
  theme(panel.grid.minor.y = element_line(color = "white"), panel.grid.major.x = element_line(color = "white")) 

当我尝试在饼图中转换它时,添加代码行coord_polar ()我得到这个图表:

在此处输入图像描述

这是我假装的:

在此处输入图像描述

谢谢!

标签: rggplot2pie-chart

解决方案


由于您没有提供示例数据,因此我使用了其他一些示例数据。也许这将满足您的需求。请根据需要进行修改。

library(ggrepel)
library (ggplot2)

df = read.csv("https://www.dropbox.com/s/lc3xyuvjjkyeacv/inputpie.csv?dl=1")

df <- df %>% group_by(fac)  %>%
  mutate(
    facc = ifelse(fac=="f1", "15/16 to 19/20", "20/21"),
    cs = rev(cumsum(rev(per))),
    text_yp = per/2 + lead(cs, 1),
    text_yp = if_else(is.na(text_yp), per/2, text_yp)
  )  %>%  data.frame()

df$type <- factor(df$type, levels=unique(df$type))

ggplot(df, aes(x="", y=per, fill=type )) +
  geom_bar(stat="identity", width=1) +
  coord_polar("y", start=0)   + 
  facet_grid(facc~.  ) + 
  scale_fill_brewer(palette="Paired") + 
  theme_void()   +
  geom_label_repel(
    aes(label = text_y, y = text_yp), show.legend = FALSE
  ) +
  scale_y_continuous(labels = scales::percent) +
  labs(y = " ", x = " ", fill=" ") +
  theme(legend.text = element_text(size = 8, colour = "black")) + 
  #theme(axis.text = element_text(size = 8, colour = "black")) + 
  #theme(legend.position = "bottom", legend.direction = "horizontal") + 
  guides(fill = guide_legend(reverse=TRUE)) + 
  theme(plot.margin = unit(c(1, 1, 1, 1), "cm")) + 
  theme(panel.grid = element_line(colour="grey90")) + 
  theme(panel.grid.minor.y = element_line(color = "white"), panel.grid.major.x = element_line(color = "white")) 

输出


推荐阅读