《听说你也在画dotplot,但是我不服!》一般说的气泡图,其实只是搞大点的o 点图,不知道怎么搞大点的话,请戳《搞大你的点,让我们画真正的气泡图》。这里要讲的点,不再是单纯的点,它其实可以是任意图形。 在《ggimage:ggplot2中愉快地使用图片》一文中,我展示了「嵌套式绘图」,中间生成了多个饼图,再用这些产生的饼图用于做图,绘制出饼图版的气泡图: 当时还通过每次只画一个州的数据,来演示制作动图: 大家应该对下面Hans Rosling的动态气泡图不陌生,这其实是我在对Hans Rosling致敬。 ggimage包对这种图中套图的做法,不需要中间产生图片也是可以完成的。因为我们有 首先我们载入所需的包,并读入数据: library(gtable) 定义一个 plot_pie <->->function(i) { df <- gather(crime[i,],="" type,="" value,="" murder:motor_vehicle_theft)="" ="" ggplot(df,="" aes(x="">->1, value,fill=type)) + geom_col() + coord_polar(theta = 'y') + ggtitle(crime[i, 'state']) + theme_void() + theme_transparent() + theme(legend.position = 'none', plot.title = element_text(size=rel(6), hjust=0.5))}crime <- as_data_frame(crime)crime$pie="">-><->->1:nrow(crime), plot_pie) 我们根据人口,按照比例来计算饼图的大小,并且抽离出饼图的图例: radius <- sqrt(crime$population="" pi)radius="">-><- radius/max(radius)crime$width="">-><- diff(range(crime$murder))="" *="">->0.2 * radiuscrime$height <- diff(range(crime$robbery))="" *="">->0.2 * radiusleg1 <- gtable_filter(="" ="" ggplot_gtable(="" ="" ="" ="">->1) + theme(legend.position='right')) ), 'guide-box') 最后是出图,用 p <- ggplot(crime,="" aes(murder,="" robbery))="" +="" geom_subview(leg1,="" x="">->10, y=50) + geom_subview(subview=crime$pie, x=crime$murder, y=crime$Robbery, ggimage系列 |
|