高维分面应用——ggplot2分面气泡图饼图

今天仍然是一篇介绍关于ggplot2高维分面的教程,为什么要单独把这一块内容写这么多篇呢,因为很重要,而且很难搞定呀,高维分面是否能够熟练掌握将决定着你对ggplot2的理解甚至对于整个高维数据可视化的理解是否能够进阶。

其实ggplot2系统内的分面函数只有简单的一个facet_grid(),但是恰恰就是这么一个不很起眼,甚至看起来有些特立独行的分面函数,却给高维数据可视化带来了革命性的变化,有了它,所有基于ggplot2的可视化图形都能够扩展呈现 维度,从第三维、第四维、第五维(理论上来说)。

还是再强调一下facet_grid()在ggplot2各个几何图层中的地位和控制范围,分面函数作为一个特殊的,具有美学映射属性,却被设计在了与几何图层近乎独立地位(表现在从写法上来看,它并没有被设计在几何图层内,而是与其他几何图层在位置上平行),由此可见包作者对其的推崇和重视。

它的控制权限是很高的,倘若你在facet_grid()函数内部指定了一个分面参数,那么剩余的所有几何图层都可以自动适用这个分面(当然前提是各几何图层的美学映射中都好含有与分面参数相同的变量)。

所以想要分面参数同事控制多个图层,必须保证每一个图层内都含有该分面参数同名的变量。

今天以气泡饼图为例:

library(ggplot2)
library(dplyr)
library(rgdal)
library(shiny)
library(shinythemes)
library(scatterpie)

导入并整理地图数据:

china_map <-readOGR("D:/R/mapdata/State/china.geojson","OGRGeoJSON",stringsAsFactors=FALSE)
Encoding(china_map@data$name)<-"UTF-8"china_map <- fortify(china_map) 
province_city <- read.csv("D:/R/rstudy/Province/chinaprovincecity.csv",stringsAsFactors = FALSE,check.names=FALSE)

构造气泡饼图数据:

city_data<-data.frame(Name=rep(c("北京","上海","重庆","武汉","广州","西安")))
for (i in 2:7) city_data[,i]<-round(runif(6,0,250))
names(city_data)[2:7]<-paste0("Year",2011:2016)
city_data$Full<-apply(city_data[,-1],1,sum)
city_data$Full_scale<-scale(city_data$Full,center=F,scale=T)*2

#提取中心城市数据:
city_data<-city_data%>%merge(province_city[,c("city","wd","jd")],by.x="Name",by.y="city",all.x=TRUE)

气泡饼图:

ggplot() +    
    geom_polygon(data=china_map,aes(x=long,y=lat,group=group),fill="white",color="grey")+
    geom_scatterpie(data=city_data,aes(x=jd,y=wd,r=Full_scale),cols=names(city_data)[2:7],color="grey", alpha=.8) +
    scale_fill_brewer(guide=FALSE)+   
    theme_void()

构造带有分类变量的气泡饼图数据:

city_data2<-data.frame(Name=rep(city_data$Name,6))
for (i in 2:4) city_data2[,i]<-runif(nrow(city_data2),10,100)
names(city_data2)[2:4]<-paste0("Value",1:3)
city_data2$Year<-rep(paste0("Year",2011:2016),each=6)
city_data2<-city_data2%>%merge(city_data[,c("Name","jd","wd")],by="Name",all.x=T)
city_data2$Full<-apply(city_data2[,2:4],1,sum)%>%scale(center=F,scale=T)
city_data2$Full<-as.numeric(city_data2$Full)*2
city_data2<-city_data2%>%arrange(Year,Name)

高维分面饼图:

ggplot()+
geom_polygon(data=china_map,aes(x=long,y=lat,group=group),fill="white",color="grey")+
geom_scatterpie(data=city_data2,aes(x=jd,y=wd,r=Full),cols=names(city_data2)[2:4],color="grey", alpha=.8) +
    scale_fill_brewer(guide=FALSE)+   
    facet_wrap(~Year)+
    theme_void()

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2017-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

数据分析中的可视化-常见图形

import matplotlib.pyplot as plt import pandas as pd from pandas import Series, D...

1302
来自专栏数据结构与算法

Kruskal重构树入门

在运行Kruskal算法的过程中,对于两个可以合并的节点$(x, y)$,断开其中的连边,并新建一个节点$T$,把$T$向$(x, y)$连边作为他们的父亲,同...

2285
来自专栏向治洪

自定义Interpolator

nterpolator这个东西很难进行翻译,直译过来的话是补间器的意思,它的主要作用是可以控制动画的变化速率,比如去实现一种非线性运动的动画效果。那么什么叫做非...

2187
来自专栏大数据挖掘DT机器学习

【案例】SPSS商业应用系列第3篇:最近邻元素分析模型

应用 IBM SPSS Statistic 的最近邻元素分析模型对汽车厂商预研车型进行市场评估。 某汽车厂商的研发部门提出了多个预研车型的技术指标...

50610
来自专栏walterlv - 吕毅的博客

从 Matrix 解构出 Translate/Scale/Rotate(平移/缩放/旋转)

发布于 2017-11-20 16:20 更新于 2017-11...

4431
来自专栏Code_iOS

OpenGL ES 2.0 (iOS)[06-1]:基础纹理

Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;

2182
来自专栏AI科技评论

干货 | 如何用TensorFlow生成令人惊艳的分形图案

今天来介绍一个小项目:在TensorFlow中生成分形图案。分形本身只是一个数学概念,与机器学习并无太大关系,但是通过分形的生成,我们可以了解怎么在Tensor...

42213
来自专栏GopherCoder

charts: 图表工具

4523
来自专栏数说戏聊

Tableau基础知识1.文件与数据1.1 Tableau文件类型2.制表3.绘图

1322
来自专栏PPV课数据科学社区

【学习】《R实战》读书笔记(第三章)

会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到学习...

3296

扫码关注云+社区

领取腾讯云代金券