微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R - 分面饼图

如何解决R - 分面饼图

我有四个饼图,我需要将它们全部显示在两行两列中。 我使用下面的脚本来显示一个

slices <- c(39,7,13)
lbls <- c("monthly","daily","weekly")
pct <- slices
lbls <- paste(lbls,pct) 
pie(slices,labels = lbls,col=rainbow(length(lbls)),main="Purchased Products")

如果其他三个饼图值如下所示,我如何每次创建三个不同主标题的图表:

slices <- c(40,5,12)
lbls <- c("monthly","weekly")

slices <- c(15,27,47)
lbls <- c("monthly","weekly")

slices <- c(58,47,2)
lbls <- c("monthly","weekly")

解决方法

类似的东西会起作用。您只需更改数据的格式并使用 ggplot2 中的 tidyverse

library(tidyverse)

df1 <- expand_grid(pie = 1:4,labels = c("monthly","daily","weekly"))
df2 <- tibble(slices = c(39,7,13,40,5,12,15,27,47,58,2))

# join the data
df <- bind_cols(df1,df2) %>% 
  group_by(pie) %>% 
  mutate(pct = slices/sum(slices)*100) # pct for the pie - adds to 100
  
# graph
ggplot(df,aes(x="",y=pct,fill=labels)) + # pct used here so slices add to 100
  geom_bar(stat="identity",width=1) +
  coord_polar("y",start=0) +
  geom_text(aes(label = slices),position = position_stack(vjust=0.5)) +
  facet_wrap(~pie,ncol = 2) +
  theme_void() +
  theme(legend.position = "bottom")

enter image description here

使用您的数据的编辑版本

> df
# A tibble: 12 x 4
# Groups:   pie [4]
     pie labels  slices   pct
   <int> <chr>    <dbl> <dbl>
 1     1 monthly     39    66
 2     1 daily        7    12
 3     1 weekly      13    22
 4     2 monthly     40    70
 5     2 daily        5     9
 6     2 weekly      12    21
 7     3 monthly     15    17
 8     3 daily       27    30
 9     3 weekly      47    53
10     4 monthly     58    54
11     4 daily       47    44
12     4 weekly       2     2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。