高维分面应用——ggplot2分面气泡图饼图
时间:2022-05-08
本文章向大家介绍高维分面应用——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()
- 利用iText 组件导出PDF
- 利用POI组件导出Excel的简单示例
- MongoDB 整合spring-data-jpa,spring 4.x
- 【微信开发】 红包接口开发
- 【微信开发】 使用单例设计模式 提供AccessToken 和Jsapi_ticket缓存支持
- @ResponseBody响应JSON 406
- tomcat不能运行或共存多个项目
- Spring Task 定时任务
- 如何为机器学习索引,切片,调整 NumPy 数组
- 逆向工程分析:摩托罗拉安全摄像头究竟有多不安全?
- 【maven学习】 利用Profile构建不同环境的部署包
- 如何写好一份渗透测试报告?
- jqGrid 关闭刷新父页面数据
- [MyBatis]诡异的Invalid bound statement (not found)错误
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx启动报错:sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object
- 有赞美业店铺装修前端解决方案
- nginx部署react项目
- Golang 标准库 限流器 time/rate 设计与实现
- Node搭建简易的UDP服务器
- cordova run android 下载gradle报timeout
- How we redesign the NSQ-NSQ重塑之客户端
- [PHP] 使用php生成下载csv文件
- 深入浅出MySQL crash safe
- Cordova+React+Ant.design项目搭建
- ubuntu配置ZeroTier
- 有赞零售小票打印图片二值化方案
- 虚拟机中CentOS获取ip
- CentOS7 安装JDK8,tomcat8
- Py2和Py3共存相关问题