How to explode donut chart slices using R (ggplot2)
Asked Answered
C

1

6

To the left is how my donut chart currently looks like and to the right how it should look like:

enter image description here

Is there any way to explode the donut chart using R ?

Here is my code:

ggplot(dat, aes(fill = goalGroups, ymax = ymax, ymin = ymin, xmax = 4.8, xmin = 3)) +
  geom_rect(color = "white") +
  coord_polar(theta="y", direction = -1) +
  xlim(c(0, 8)) +
  theme_bw() +
  theme(panel.grid=element_blank()) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank()) +
  theme(axis.title.x = element_blank()) +
  theme(axis.title.y = element_blank()) +
  theme(panel.border = element_blank())

I am very grateful for any help!

Chaqueta answered 3/2, 2016 at 11:18 Comment(0)
C
6

You can try creating xlim and ylim for each category

for example

Data

dat = data.frame(count=c(30,  10), category=c("A",  "C"),stringsAsFactors = F)

Additional calc

dat$fraction = dat$count / sum(dat$count)
dat = dat[order(dat$fraction), ]
dat$ymax = cumsum(dat$fraction)-0.01
dat$ymin = c(0, head(dat$ymax, n=-1))+0.01
dat$all_=length(unique(dat$category))
dat$x1=dat$all_-(1:nrow(dat))*0.5+1
dat$x2=dat$all_-(1:nrow(dat))*0.5+2

Plot

p2=ggplot()+aes(ymin=0)+geom_rect(data=dat,aes(fill=category,ymax=ymax, ymin=ymin,  xmax=x1, xmin=x2),color = "white")+
  ylim(0,1)+
  xlim(c(0,3+length(unique(dat$category))))+
  coord_polar(theta="y", direction = -1) +
  theme_bw() +
  theme(panel.grid=element_blank()) +
  theme(axis.text=element_blank()) +
  theme(axis.ticks=element_blank()) +
  theme(axis.title.x = element_blank()) +
  theme(axis.title.y = element_blank()) +
  theme(panel.border = element_blank())
p2

enter image description here

Also work good for more than two category

dat = data.frame(count=c(30,15,  10), category=c("A", "B", "C"),stringsAsFactors = F)

enter image description here

Circumvallate answered 4/2, 2016 at 6:52 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.