快来给这个图表起个名字吧~
我一直觉得,一门语言的学习一定要打牢基础,只有基础足够牢固,后期你无论选择哪个方向才会走的一路顺风。
这是我学习R语言将近一年的深刻体会,当初自己也经历过各种急功近利、自我陶醉的状态,当时没有任何人引导,也没怎么正儿八经的学过一门体系健全的教程,硬生生的一直刷题,就这么一路撑过来来了,也算是勉强越过了第一个瓶颈期,但是过程真的太辛苦。
近来有很多人跟我咨询如何学习R语言,其实个人觉得,在他们心里肯定早就有了答案,只是自己不愿意面对,或者总想从过来人的口中得到一丝安慰而已。
要么用时间去换技能,要么花钱买时间,让别人教你技能,但是两种方法最终结果如何,都是取决于自己的,倘若你连如何安装包、如何加载包、如何更新包这种连百度都知道的东西,都不愿意自己去解决,那么何时才能度过瓶颈期,才能成为熟手,更别提要熟练的运用于工作中。
学习习惯很重要,是否具备自我驱动力,不依靠外力去自助主解决问题,在某种程度上可能决定着你在这门技能上能达到的高度。
我这几个月写的可视化内容确实难度很高,一直担忧这会不会带坏读者的节奏,好像R语言的可视化就应该朝着这种偏怪难的方向发展,而荒废了基础的学习。
我的担忧是对的,确实有很多几乎零基础或者基础很薄弱的小伙伴儿,可能ggplot2函数都没记全,甚至R语言基础都没有看过一个遍,就开始各种复制黏贴,开始跑代码,然后各种问题百出。
还是善意的提醒一下,写这些东西仅仅是我的个人兴趣,我是在用这些图表来不断尝试突破现状,挑战自己的新高度,因为之前个人已经有过将近1年的高强度练习,早已过了瓶颈期。可是对于初学者而言,那些高难度图表的代码对你技能的提升几乎毫无价值,你需要的是按照ggplot2的基础强化学习,融会贯通其体系和理念。
为了给更多R语言可视化爱好者提供少走弯路的机会,最近和天善智能合作,开发了这一期线上课程,时间虽短,但是对于入门而言,极具价值。这门课程也是为今后的高阶课程打基础的。
好了说了这么多,无非就是想要给自己的课程打个广告嘛哈哈哈,接下来当然是继续挑战自我咯~
今天又是一个超级有趣的经济学人图表,名字真不好叫,先把代码撸完,你们爱叫啥叫啥吧~
首先大致分析一下该图表,全是矩形块 ,而且错位排列,柱形图,NO,条形图,NO,因为横纵位置都是错开的。
好像骂一句MMP,这图Economics到底是用撒做的,太无聊了。
不过呢,如果是用ggplot2的话,这图确实难不倒我,思路如下。
用geom_rect图层,还记得之前做过的那个方块面积图嘛,思路如出一辙,我们仅需获取所有矩形块四个角所在位置的点坐标即可。
#构造原始数据
mydata<-data.frame(
China=c(30,8,6,7,14,11,22,3),
SouthKorea=c(15,6,3,5,16,14,19,22)
)
根据以上数据标签构造作图数据。
#China组的矩形数据:
start_xmin<-seq(from=15,by=10,length=8)
end_xmax<-seq(from=45,by=10,length=8)
start_ymin<-cumsum(c(0,mydata[1:7,"China"]))
end_ymax<-cumsum(mydata[,"China"])
以上构造了左侧那组矩形的所有边角坐标点,接下来计算矩形中心 坐标点:
mynewdata<-data.frame(start_xmin,end_xmax,start_ymin,end_ymax)
mynewdata$label_x<-mynewdata$start_xmin+15mynewdata$label_y<-mynewdata$start_ymin+mydata$China/2
构造右侧矩形系列边角坐标点:
start_xmin<-seq(from=115,by=10,length=8)
end_xmax<-seq(from=145,by=10,length=8)
start_ymin<-cumsum(c(0,mydata[1:7,"SouthKorea"]))
end_ymax<-cumsum(mydata[,"SouthKorea"])
#计算中心点位置
data1<-data.frame(start_xmin,end_xmax,start_ymin,end_ymax)
data1$label_x<-data1$start_xmin+15data1$label_y<-data1$start_ymin+mydata$SouthKorea/2
合并左右侧数据
mynewdata<-rbind(mynewdata,data1)
mynewdata$value<-c(mydata$China,mydata$SouthKorea)
构造类别标签(图例填色需要)
label=rep(c("Food,beverages & tobacco","Clothing & footwear","Household & services","Health","Transport & communications","Leisure & education","Housing & household fuels","Others"),2)
mynewdata$label<-label
mynewdata$label<-factor(mynewdata$label,levels=mynewdata$label[1:8],ordered=T)
图形可视化过程
library("ggplot2")
library("grid")
library("showtext")
library("Cairo")
font.add("myfont","msyh.ttc")
setwd("E:/数据可视化/R/R语言学习笔记/数据可视化/ggplot2/优秀R语言案例")
草图预览:
ggplot(mynewdata)+
geom_rect(aes(xmin=start_xmin, xmax =end_xmax, ymin =start_ymin, ymax =end_ymax,fill=label))
采集色板:
palette<-c("#007990","#68C1C7","#EBEBDF","#6DA091","#AAC4B9","#761618","#249BB3","#848587")
最终图形
CairoPNG(file="matirx_scatter.png",width=1200,height=600)
showtext.begin()
ggplot(mynewdata)+
geom_rect(aes(xmin=start_xmin, xmax =end_xmax, ymin =start_ymin, ymax =end_ymax,fill=label))+
geom_text(aes(x=label_x,y=label_y,label=paste0(value,"%")),family="myfont",size=6)+
scale_y_continuous(limits=c(0,110),breaks=seq(0,100,10),label=seq(0,100,10))+
scale_fill_manual(values=palette)+
guides(fill=guide_legend(title=NULL,nrow=2)) +
labs(title="Composition of nominal consumption per head in China and South Korea,2015",
subtitle="(% of total)",
caption="Sources:National Bureau of Stistics; The Economist Intelligence Unit.")+
theme_void(base_family="myfont",base_size=20) %+replace%
theme(
plot.title=element_text(size=25,hjust=0,lineheight=1.2),
legend.position=c(0.60,.95),
plot.caption=element_text(hjust=0),
axis.ticks.y=element_line(),
axis.ticks.length=unit(0.5,'cm'),
plot.margin=margin(1,1,1,1,unit="cm"),
axis.text=element_text(),
axis.text.x=element_blank(),
)
showtext.end()
dev.off()
哈哈是不是很神奇呀,想不想学这么棒的技能,那就从ggplot2基础开始学起吧,冰冻三尺,非一日之寒,相信假以时日,你也可做的这么棒!
- GO语言异常处理机制panic和recover分析
- WordPress前端html代码压缩优化,附对应知更鸟主题压缩报错的解决方案
- 原创插件:网站收录查询和显示WordPress插件(自定义栏目优化版)
- Linux系统crontab备份数据库执行不成功?可能是百分号%在作怪!
- go语言十大排序算法总结
- BaiduSubmit:度娘WordPress结构化数据插件(改进版)
- Android自绘动画实现与优化实战——以Tencent OS录音机波形动画为实例
- Go语言归并排序算法实现
- grep无法查找shell传过来的变量?先注意一下文本格式吧!
- 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?
- nwui —— 又一个go语言图形界面解决方案
- Golang 通用连接池
- 解决JS操作Cookies出现的乱码问题,修复WordPress评论乱码
- 分享一个WordPress外链跳转教程,兼容知更鸟暗箱下载和文章索引
- 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 数组属性和方法
- kubernetes-核心概念及创建应用(六)
- k8s1.13.0二进制部署-Dashboard和coredns(五)
- kubernetes监控-prometheus(十六)
- kubernetes监控-Heapster+InfluxDB+Grafana(十五)
- centos7 安装mysql5.7
- ceph-简介及安装(luminous)版
- Activiti7 查询用户任务列表
- ansible自动化部署工具
- IDEA Activiti 画图中文乱码
- k8s集群部署高可用完整版
- kubenetes-rancher多集群管理(二十二)
- kubernetes-helm程序包管理器(二十)
- Activiti7 组任务
- kubeadm快速部署kubernetes(十九)
- prometheus-简介及安装