前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高维分面应用——ggplot2分面气泡图饼图

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

作者头像
数据小磨坊
发布2018-04-11 17:25:45
1.8K0
发布2018-04-11 17:25:45
举报
文章被收录于专栏:数据小魔方数据小魔方

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

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

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

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

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

今天以气泡饼图为例:

代码语言:javascript
复制
library(ggplot2)
library(dplyr)
library(rgdal)
library(shiny)
library(shinythemes)
library(scatterpie)

导入并整理地图数据:

代码语言:javascript
复制
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)

构造气泡饼图数据:

代码语言:javascript
复制
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)

气泡饼图:

代码语言:javascript
复制
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()

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

代码语言:javascript
复制
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)

高维分面饼图:

代码语言:javascript
复制
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()
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据小魔方 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入并整理地图数据:
    • 构造气泡饼图数据:
    • 气泡饼图:
      • 构造带有分类变量的气泡饼图数据:
      • 高维分面饼图:
      相关产品与服务
      图数据库 KonisGraph
      图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档