终于等到你——ggplot2树状图
杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。个人公众号:数据小魔方(微信ID:datamofang) ,“数据小魔方”创始人。
2017年8月份的R语言更新包中,默默地加入了支持ggplot2树状图的新几何对象,从此在R语言中制作树状图,不用再求助于第三方包的辅助了。
该包既有Cran上的正式发行版,也有托管在GitHub上的开发版,安装方式如下:
CRAN:
install.package("treemapify")
Github:
devtools::install_github("wilkox/treemapify")
GitHub主页:
https://github.com/wilkox/treemapify
载入本文章所需的扩展包:
library("ggplot2")
library("treemapify")
library("tweenr")
library("gganimate")
library("RColorBrewer")
安装该包之后,你的ggplot2中会多出一个树状图几何对象——geom_treemap()。
本次案例使用该(treemapify)包内的内置数据集:
预览一下数据集结构:
str(G20)
head(G20)
该数据集描述20峰会参会国家的经济指标,里面包含了五个字段,分别是全球的大区(region)、国家名称(country)、GDP指标(gdp_mil_usd)(应该是二次计算的某种指标),人类发展指数(hdi),已经经济发展程度(econ_classification)。
字段名称 类型
region 因子型
country 因子型
gdp_mil_usd 数值型(整数)
hdi 数值型(浮点)
econ_classification 因子型
树状图是没有显式坐标系统的一类特殊图形,依靠正方化算法,将样本总体正方形按照实际观测值占总体比例分割成单个矩形方块。因而其至少需要一个数值型变量作为输入参数。
一个简单的树状图:
ggplot(G20, aes(area = gdp_mil_usd)) +
geom_treemap()
因为area仅仅是定义了一个数值型变量的方块大小,填充颜色是可以单独定义的。但是颜色往往也可以单独作为一个数值型度量的表达方式。
ggplot(G20, aes(area = gdp_mil_usd)) +
geom_treemap(fill="steelblue")
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi)) +
geom_treemap()+
scale_fill_distiller(palette="Greens")
添加标签:
包作者针对ggplot树状图写了优化好的文本 标签函数geom_treemap_text(刚开始就说过树状图超越了传统三大坐标系的范畴,没有显式声明的坐标系统,算法比较特殊因而无法使用常规的geom_text()进行添加标签)。
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi, label = country)) +
geom_treemap() +
geom_treemap_text(fontface = "italic", colour = "red", place = "centre",grow = TRUE,alpha=.6)+
scale_fill_distiller(palette="Greens")
其中place参数控制每一个方块中标签相对于四周的位置,grow则控制标签是否与方块大小自适应(呈大致比例放大缩小)
次级分组(亚群):
该包支持次级分组(专业术语叫做亚群),这在实际应用场景中非常广泛,比如我们在观察国家指标大小的同时,还想获取国家所属大区的总体指标,通过加入次级分组,我们可以获取两个维度信息。通过在美学映射中设置subgroup参数(一个类别型变量),函数内部可以自动完成亚群的变量聚合计算,并在图形成用框线显示出次级类别大小的规模。
ggplot(G20, aes(area = gdp_mil_usd, fill = hdi, label = country,subgroup = region)) +
geom_treemap() +
geom_treemap_subgroup_border() +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5, colour ="black", fontface = "italic", min.size = 0) +
geom_treemap_text(colour = "red", place = "topleft", reflow = T,alpha=.5)+
scale_fill_distiller(palette="Greens")
其中reflow参数用于控制标签是否自适应矩形块大小,若按照原始大小超过矩形块,则会自动换行显示。
分面系统:
当你觉得使用次级分组不能获得一个很好地视觉呈现效果,geom_treemap还支持ggplot函数中的fact_grid分面参数,这就是所有ggplot2扩展函数的好处,可以继承源自于ggplot2的高级图形属性。
ggplot(G20, aes(area = gdp_mil_usd, fill = region, label = country)) +
geom_treemap() +
geom_treemap_text(grow = T, reflow = T, colour = "black") +
facet_wrap( ~ econ_classification) +
scale_fill_brewer(palette="Blues")+
labs(
title = "The G-20 major economies",
caption = "The area of each country is proportional to its relative GDP within the economic group (advanced or developing)",
fill = "Region" )+
theme(legend.position = "bottom",
plot.caption=element_text(hjust=0))
GIF动画流:
借助tweened包提供的差值方法,你可以实现将不同时间点的截面数据进行追加,并且编组成gganimate函数可识别的动画帧组,通过tweenlength、statelength和nframes 参数来控制变化的长度、每一帧停留的时间以及切换的帧数。
G20_alt <- G20
G20_alt$gdp_mil_usd <- sample(G20$gdp_mil_usd, nrow(G20))
G20_alt$hdi <- sample(G20$hdi, nrow(G20))
tweened <- tween_states(list(G20,G20_alt,G20), tweenlength = 8, statelength = 5, ease = 'cubic-in-out', nframes = 30)
animated_plot <- ggplot(tweened, aes(area = gdp_mil_usd, fill = hdi,label = country, subgroup = region,frame = .frame)) +
geom_treemap(fixed = T) +
geom_treemap_subgroup_border(fixed = T) +
geom_treemap_subgroup_text(place = "centre", grow = T, alpha = 0.5,colour = "black", fontface = "italic", min.size = 0,fixed = T) +
geom_treemap_text(colour = "white", place = "topleft", reflow = T, fixed = T)+
scale_fill_distiller(palette="Greens")
ani.options(interval = 1/10)
gganimate(animated_plot, "E:/animated_treemap.gif", title_frame = F,ani.width = 1000, ani.height = 800)
treemapify包给ggplot2提供的geom_treemap(),填补了ggplot2原生几何对象在树状图领域的空白,可谓是进一步扩展、丰富ggplot2生态系统。
参考文献:
https://github.com/thomasp85/tweenr
https://github.com/wilkox/treemapify
在线课程请点击文末原文链接:
往期案例数据请移步本人GitHub:
https://github.com/ljtyduyu/DataWarehouse/tree/master/File
公众号后台回复关键字即可学习
回复 R R语言快速入门免费视频
回复 统计 统计方法及其在R中的实现
回复 用户画像 民生银行客户画像搭建与应用
回复 大数据 大数据系列免费视频教程
回复 可视化 利用R语言做数据可视化
回复 数据挖掘 数据挖掘算法原理解释与应用
回复 机器学习 R&Python机器学习入门
终于等到你——ggplot2树状图相关推荐
- R语言ggplot2可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram)
R语言ggplot2可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Hierarchical Dendrogram) 目录
- R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色、在树状图dendrogram中为不同的层次聚类簇配置不同的色彩
R语言ggplot2可视化:为层次聚类树状图dendrogram中的簇进行着色.在树状图dendrogram中为不同的层次聚类簇配置不同的色彩 #层次聚类树状图dendrogram labs = pa ...
- html树状图右侧_树状图及制作方法(Excel 2016/Excel 2013)
↑↑↑关注ExcelEasy,让Excel更简单 树状图是一种展示层次结构数据的图表,可以很好的揭示各类别数据的比例关系及类别内数据的组成结构.今天为大家详细介绍一下树状图的制作方法 树状图在Exce ...
- json树状图可视化_12个流行的Python数据可视化库总结
总结了10个不同领域的 Python 数据可视化库,有常用的,也有比较小众的. 1. matplotlib matplotlib是Python数据可视化库的OG.尽管它已有十多年的历史,但仍然是Pyt ...
- ztree插件树状图
开发工具与关键技术:MVC 作者:Mr_恺 撰写时间:2019年6月27日 树状图不知道大家有没有做过,要不是做项目,项目中有这个需求,我也没有那么快能接触到这过功能,刚开始的时候对这个功能真的一脸懵 ...
- MatLab中画树状图方法treeplot(nodes)中描述树结构的矢量nodes的构造
按要求需要用matlab画树状图,在网络上找到两句代码: nodes = [0 1 2 2 4 4 4 1 8 8 10 10]; treeplot(nodes); 画出了如下图: 其中矢量nodes ...
- bzoj 4871: [Shoi2017]摧毁“树状图”
4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec Memory Limit: 512 MB Submit: 53 Solved: 9 [Su ...
- R语言绘制环形树状图
R语言绘制环形树状图 1.主要用到dendextend和circlize包绘图: library(dendextend) library(circlize)# 距离矩阵 d <- dist(US ...
- Python使用matplotlib可视化树状图、层次聚类系统树图、树状图根据给定的距离度量将相似点分组在一起、并根据点的相似性将它们组织成树状图链接起来(Dendrogram)
Python使用matplotlib可视化树状图.层次聚类系统树图.树状图根据给定的距离度量将相似点分组在一起.并根据点的相似性将它们组织成树状图链接起来(Dendrogram) 目录
- R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放、hclust包层次聚类(创建距离矩阵、聚类、绘制树状图dendrogram,在树状图上绘制红色矩形框)
R语言层次聚类(hierarchical clustering):使用scale函数进行特征缩放.hclust包层次聚类(创建距离矩阵.聚类.绘制树状图dendrogram,在树状图上绘制红色矩形框) ...
最新文章
- 几何深度学习(Geometric Deep Learning)技术
- 总编下午茶:挑战者心态能否帮助微软重回云计算巅峰?
- java条件语句_Java条件语句
- linux 中php以及nginx的重启命令
- linux 磁盘检测卡主_Linux启动过程
- 如何成为一个Linux内核开发者
- 计算机user用户的密码存储在,windows存放用户密码的文件
- Nginx 反向代理解决跨域问题
- 【CVPR2019】Workshops 研讨会列表及链接
- 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建
- [入门阅读]怎样在android中解析JSON
- Python 文件处理
- 百度地图缩放级别与比例尺的关系
- 筑梦数字时代,城链科技战略峰会西安站顺利落幕
- arcgis导入坐标点转面_点数据转成Arcgis线、面文件
- Linux 常用命令实践
- 用scons编译STM32F103工程
- 找出10个数中最大的数
- bat操作php文件内容,定时运行某个php文件的bat文件
- 类似帝国时代的java游戏_有哪些类似《帝国时代》系列的好游戏推荐?