仿经济学人——矩阵气泡图
时间:2022-05-08
本文章向大家介绍仿经济学人——矩阵气泡图,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本篇文章案例来源于经济学人2013年一幅关于家庭支出结构与国家间的交叉对比图。
该图信息量相当丰富,至少涵盖了四个维度的信息,支出结构信息(类别型字段)、国别信息(类别型字段)、支出水平分类(类别型字段)、支出规模(数值型指标)等。
倘若使用ggplot进行绘制,思路非常简单,仅通过散点图层皆可完成,ggplot2的散点图可以支持离散标度,但是如果想要处理好类别的顺序,需要把类别型变量因子化。
因为原图中有奖金100+数据点,很多都没有具体数值,一个一个用肉眼估计简直丧心病狂,所以我模拟了一组数值,只保证思路讲到位就OK。
setwd("E:/微信公众号/公众号——数据小魔方/2017年9月/20170914/")
mydata<-read.csv("matrix_bubble.csv",stringsAsFactors = FALSE,check.names = FALSE)
原始数据中带有n,导入时R语言会自动给添加一个,这里涉及到R语言中保留字符的问题,需要将多余的删掉。
mydata$Class[c(1,6,7)]<-c("Housing,fueln&utilities","Restaurantsn& hotels","Clothingn& footwear")
names(mydata)[9:11]<-c("SaudinArabia","SouthnKorea","UnitednStates")library("tidyr")
mydata1<-gather(mydata,Country,Spend,-1)
mydata1$Class<-factor(mydata1$Class,levels=c("Education","Alcohol & tobacco","Communications","Furnishings","Clothingn& footwear","Restaurantsn& hotels","Health","Recreation","Transport","Food","Housing,fueln&utilities"),ordered=T)
分割支出规模的类别区间:
qa<-quantile(mydata1$Spend,c(0,.25,.5,.75,1))
mydata1$Spend_fact<-cut(mydata1$Spend,breaks=qa,labels = c("lowest spend","below average","above average","highest spend"),include.lowest=TRUE,ordered=T)
制作草图:
library("ggplot2")library("grid")library("showtext")library("Cairo")
font.add("myfont","msyh.ttc")
setwd("E:/《R语言商务图表与可视化》/9.12——R语言ggplot2可视化在线分享")
CairoPNG(file="matirx_scatter.png",width=1200,height=900)
showtext.begin()
ggplot(data=mydata1)+
geom_hline(aes(x=Country,y=Class,yintercept = 1:nrow(mydata1)),size=20,colour="#E4EDF2",alpha=.5)+
geom_vline(aes(x=Country,y=Class,xintercept = 1:nrow(mydata1)),linetype="dashed")+
geom_point(aes(x=Country,y=Class,size=Spend,fill=Spend_fact),shape=21,colour="white")+
scale_fill_manual(values=c("#F9DBD3","#F1B255","#519F46","#41B0C3"))+
scale_size_area(max_size=25)+
scale_x_discrete(position = "top")+
guides(size=FALSE,fill=guide_legend(title="Within category",direction="horizontal"))+
labs(title="How they spend it",subtitle="Househlod spending*,of total,2013 or latest,includes taxes",caption="Source:Eurostat")+
theme_void(base_size=20,base_family="myfont") %+replace%
theme(
legend.position="top",
panel.grid.major.x=element_line(linetype="dashed"), #plot.margin=margin(5,5,5,5,unit="pt"),
axis.text=element_text(size=15,hjust=0.5),
plot.title=element_text(size=35,hjust=0,lineheight=1.2),
plot.caption=element_text(hjust=0,lineheight=1.2)
)
showtext.end()
dev.off()
数据源请移步GitHub主页下载: https://github.com/ljtyduyu/DataWarehouse/tree/master/File
- 零基础学编程036:快速编写一个GUI程序
- WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
- 零基础学编程041:欧拉公式的几何意义
- 零基础学编程040:在Windows上安装Python库的正确姿势
- c++/c 获取cpp文件行号跟文件名
- 零基础学编程042:画函数图像
- C-SATS工程副总裁教你如何用TensorFlow分类图像 part2
- C++11 Lambda表达汇总总结
- TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)
- C++虚析构函数解析
- C-SATS工程副总裁教你如何用TensorFlow分类图像 part1
- 帝国cms文章页调用当前文章URL如何操作?
- dedecms文章页调用地址(当前文章URL)如何操作?
- 饭团开通一周,3人学会了比特币操作
- 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 数组属性和方法
- MATLAB批量读取一个文件夹下的图片
- python next()迭代器完成会引发StopIteration异常
- 没想到,Git居然有3种“后悔药”!
- JetCache埋点的骚操作,不服不行啊
- StringBuider 在什么条件下、如何使用效率更高?
- SpringCache与redis集成,优雅的缓存解决方案
- 理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
- WinXP的MS08-067漏洞利用复现和解决方案
- 实用FRIDA进阶:内存漫游、hook anywhere、抓包
- 聊聊claudb的server command
- BFE.dev前端刷题88 - 在JavaScript中实现负索引
- Springboot 原理
- Qt音视频开发17-海康sdk解码
- pytest文档47-allure报告添加用例失败截图
- [060]监听应用的前后台切换