This page aims to describe how to realise a basic circle packing chart with only one level of hierarchy. Basically, you just represent each entity or individual of your dataset with a circle, its size depends of a provided value.

It is like a barplot, but you use circle size instead of bar length. It is close to a bubble plot, but X and Y position do not mean anything. It is a circle version of a treemap.

Calculating the arrangement of dots is not a trivial problem. To resolve it, we use the packcircles library that will calculate the coordinates of every points of the circle edges. Then, we use ggplot2 to plot these shapes!

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# libraries library(packcircles) library(ggplot2) # Create data data=data.frame(group=paste("Group", letters[1:20]), value=sample(seq(1,100),20)) # Generate the layout. This function return a dataframe with one line per bubble. # It gives its center (x and y) and its radius, proportional of the value packing <- circleProgressiveLayout(data$value, sizetype='area') # We can add these packing information to the initial data frame data = cbind(data, packing) # Check that radius is proportional to value. We don't want a linear relationship, since it is the AREA that must be proportionnal to the value plot(data$radius, data$value) # The next step is to go from one center + a radius to the coordinates of a circle that # is drawn by a multitude of straight lines. dat.gg <- circleLayoutVertices(packing, npoints=50) # Make the plot ggplot() + # Make the bubbles geom_polygon(data = dat.gg, aes(x, y, group = id, fill=as.factor(id)), colour = "black", alpha = 0.6) + # Add text in the center of each bubble + control its size geom_text(data = data, aes(x, y, size=value, label = group)) + scale_size_continuous(range = c(1,4)) + # General theme: theme_void() + theme(legend.position="none") + coord_equal() |

Related

Make a search

## Leave a Reply