用ggplot2画了一个我也叫不上名的炫酷图表
时间:2022-05-08
本文章向大家介绍用ggplot2画了一个我也叫不上名的炫酷图表,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
今日心血来潮,看到一幅制作精良的图表,就想使用ggplot2代码实现,虽然不知道该怎么称呼这个图表,但是能顺利做出来也是很有成就感的!
加载数据包
library("ggplot2")
library("grid")
library("showtext")
library("Cairo")
font.add("myfont","msyh.ttc")
构造图形数据源
mydata<-data.frame(
id=1:13,
class=rep_len(1:4, length=13),
Label=c("Events","Lead List","Partner","Markeiting & Advertising","Tradeshows","Paid Search","Webinar","Emial Campaign","Sales generated","Website","Other","Facebook/Twitter/nOther Social","Employee & CustomernReferrals"),
Value=c(7.6,15.5,17.9,21.8,29.6,29.7,32.7,43.0,57.5,61.4,67.4,68.6,68.7)
)
可视化过程:
第一步:制作基本柱形图:
(这里我用一个序列作为 占位遮挡住了底部的堆积柱形图)
ggplot(mydata)+
geom_col(aes(x=id,y=Value/2+150,fill=factor(class)),colour=NA,width=1)+
geom_col(aes(x=id,y=150-Value/2),fill="white",colour="white",width=1)+
scale_x_continuous(limits=c(0,26),expand=c(0,0))
第二步:使用极坐标转换:
ggplot(mydata)+
geom_col(aes(x=id,y=Value/2+150,fill=factor(class)),colour=NA,width=1)+
geom_col(aes(x=id,y=150-Value/2),fill="white",colour="white",width=1)+
scale_x_continuous(limits=c(0,26),expand=c(0,0))+
coord_polar(theta = "x",start=-14.275, direction = 1)
第三步:对颜色搭配和主题进行修饰:
ggplot(mydata)+
geom_col(aes(x=id,y=Value/2+150,fill=factor(class)),colour=NA,width=1)+
geom_col(aes(x=id,y=150-Value/2),fill="white",colour="white",width=1)+
scale_x_continuous(limits=c(0,26),expand=c(0,0))+
coord_polar(theta = "x",start=-14.275, direction = 1)+
scale_fill_manual(values=c("#31A2CE","#DDB925","#3F9765","#C84F44"),guide=FALSE)+
theme_void()
第四步:修饰剩余文本元素:
p<-ggplot()+
geom_col(data=mydata,aes(x=id,y=Value/2+150,fill=factor(class)),colour=NA,width=1)+
geom_col(data=mydata,aes(x=id,y=150-Value/2),fill="white",colour="white",width=1)+
geom_line(data=NULL,aes(x=rep(c(.5,13.5),2),y=rep(c(126,174),each=2),group=factor(rep(1:2,each=2))),linetype=2,size=.25)+
geom_text(data=mydata,aes(x=id,y=ifelse(id<11,160,125),label=Label),size=3.5,hjust=0.5)+
geom_text(data=mydata,aes(x=id,y=ifelse(id<11,185,150),label=paste0(Value,"%")),hjust=.5,size=4.5)+
scale_x_continuous(limits=c(0,26),expand=c(0,0))+
coord_polar(theta = "x",start=-14.275, direction = 1)+
scale_fill_manual(values=c("#31A2CE","#DDB925","#3F9765","#C84F44"),guide=FALSE)+
theme_void();p
第五步:精修图表
#图表标题、副标题title="Events,Lead Lists and partners-nmore likely be colosed-lost"content="Marketing events may by fun, but they createnlousy sales opprunities.When analyzing sharenof closed-won vs.closed-lost opportunities,nevents,leads lists and partners seem to provide thenworst performance,while refreals and socialnprovide the best performance."
#图形输出:setwd("E:/数据可视化/R/R语言学习笔记/数据可视化/ggplot2/优秀R语言案例")
CairoPNG(file="polar_bar.png",width=1200,height=900)
showtext.begin()
grid.newpage()
pushViewport(viewport(layout=grid.layout(6,8)))
vplayout<-function(x,y){viewport(layout.pos.row =x,layout.pos.col=y)}
print(p,vp=vplayout(1:6,1:8))
grid.text(label=title,x=.50,y=.6525,gp=gpar(col="black",fontsize=15,fontfamily="myfont",draw=TRUE,fontface="bold",just="left"))
grid.text(label=content,x=.50,y=.56,gp=gpar(col="black",fontsize=12,fontfamily="myfont",draw=TRUE,just="left"))
showtext.end()
dev.off()
备注:(以上图表标签是手动调整过位置的)
- Apache Hive 快速入门
- CentOS 7.3 + Server JRE 1.8 + Hadoop-2.8.0
- Apache Hbase 快速入门
- Mototrbo TMS 协议分析(数字电台短信协议分析)
- Nginx 反向代理可以缓存 HTTP POST 请求页面吗?
- Spring boot with Hive
- Spring data 如何定义默认时间与日期
- Spring boot with Oauth2
- Elasticsearch Cluster 安装与配置
- 数据库结构版本控制
- 【Golang语言社区】LollipopGo框架之商城项目--路由设置
- "LollipopGo/library/lollipop/common" 测试3
- "LollipopGo/library/lollipop/common" 测试2
- Golang语言并发技术详解
- 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 数组属性和方法
- 贷款违约预测-Task3 特征工程
- 用SQL代替DSL查询ElasticSearch怎样?
- 面试造飞机:面对Redis持久化连环Call,你还顶得住吗?
- 体验spring-boot-devtools热部署,流畅且不失强大,Jrebel呢?
- 贷款诈骗 x 摸版0day + 实战预警脚本
- 你不知道的 Linux 使用技巧
- 一文详解 Websocket 的前世今生
- 实例 | 教你用Python写一个电信客户流失预测模型
- OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测
- 看了这个总结,其实 Matplotlib 可视化,也没那么难!
- 使用OpenCV进行模糊检测(拉普拉斯算子)
- 利用opencv对图像进行长曝光
- 总说手机没有“好壁纸”,Python一次性抓取500张“美女”图片,够不够用!
- KEDA发布2.0(Beta)|来一个伸缩测试
- pandas入门:Series、DataFrame、Index基本操作都有了!