来源:DataCharm

今天小编给大家介绍一种”凹凸图(bump charts)“的绘制方法,其绘图函数主要来自R包-ggbump,本期的主要内容如下:

  • R-ggbump包基本绘图简介

  • R-ggbump包实例演示

R-ggbump包基本绘图函数简介

R-ggbump包主要包含:geom_bump()和geom_sigmoid(),两个函数主要绘制随时间变化的平滑曲线排名图,内置参数也几乎相同,如下:

( mapping = NULL,data = NULL,geom = "line",position = "identity",na.rm = FALSE,show.legend = NA,smooth = 8,direction = "x",inherit.aes = TRUE,...)

其官网(https://github.com/davidsjoberg/ggbump)提供的例子如下(部分):

Example Of geom_bump()

Example Of geom_sigmoid()

从以上也可以看出两个绘图函数所绘制的图形属于同一类别,下面我们通过实例数据进行两个绘图函数的理解。

R-ggbump包实例演示

geom_bump()绘图函数

「样例一:」我们直接构造数据并对结果继续美化操作,代码如下:

library(tidyverse)
library(ggtext)
library(hrbrthemes)
library(wesanderson)
library(LaCroixColoR)
library(RColorBrewer)
library(ggbump)
#数据构建和处理
test_01 <- tibble(country = c("India", "India", "India", "Sweden", "Sweden", "Sweden", "Germany", "Germany", "Germany", "Finland", "Finland", "Finland"),year = c(2011, 2012, 2013, 2011, 2012, 2013, 2011, 2012, 2013, 2011, 2012, 2013),value = c(492, 246, 246, 369, 123, 492, 246, 369, 123, 123, 492, 369))
test_01_plot <- test_01 %>% group_by(year) %>% mutate(rank=rank(value, ties.method = "random")) %>% ungroup
#可视化绘制
charts01_cus <- ggplot(data = test_01_plot,aes(x = year,y = rank,color=country))+ggbump::geom_bump(size=2,smooth = 8) +#添加圆点geom_point(size=8)+# 添加文本信息geom_text(data = test_01_plot %>% filter(year==min(year)),aes(x=year-.1,label=country),size=6,fontface="bold",hjust = 1) +geom_text(data = test_01_plot %>% filter(year == max(year)),aes(x = year + .1, label = country), size = 6,fontface="bold",hjust = 0) +#修改刻度scale_x_continuous(limits = c(2010.6, 2013.4),breaks = seq(2011, 2013, 1)) +scale_color_manual(values = lacroix_palette("Pamplemousse", type = "discrete"))+labs(title = "Example of <span style='color:#D20F26'>ggbump::geom_bump function</span>",subtitle = "processed charts with <span style='color:#1A73E8'>geom_bump()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>")+hrbrthemes::theme_ft_rc(base_family = "Roboto Condensed") +theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=12),plot.caption = element_markdown(face = 'bold',size = 10),legend.position = "none",panel.grid.major = element_blank(),panel.grid.minor = element_blank())+scale_y_reverse()

可以看到仅使用geom_bump()即可绘制,到这里使用了更多的绘图函数和主题、样式等设置语句对其进行美化操作,可视化结果如下:

Exercise Of geom_bump()

「样例二:」

第二个小例子,我们通过构建虚拟数据进行可视化结果绘制,如下:

#读入数据
library(readxl)df<-read_excel("rank_data.xlsx")
#定义颜色
cols <- c("#882B1A", "#676564", "#E8751A", "#779AC4", "#646E3F","#9D49B9", "#C09F2F", "#65955B", "#284D95","#B34525")
#可视化绘制
charts02_cus <- ggplot(data = df,aes(x = race_num,y = rank,color=team_name,group=team_name)) +geom_bump(smooth = 7, size = 2.5) +geom_point(data = df %>% filter(race_num == 1),size = 5) +geom_point(data = df %>% filter(race_num == 7),size = 5, shape = 21, fill = "black",stroke = 2) +geom_text(data = df %>% filter(race_num == 7),aes(x = 7.12,label = team_name),family = "Cinzel",fontface = 'bold',size = 4, hjust = 0) +#添加序号geom_point(data = tibble(x = .8, y = 1:10), aes(x = x, y = y), inherit.aes = F,shape=21,color = "grey95",size = 5,stroke = 1.) +geom_text(data = tibble(x = .8, y = 1:10), aes(x = x, y = y, label = y), inherit.aes = F,size=2.5,fontface = 'bold',color = "grey95")+coord_cartesian(clip = "off") +scale_x_continuous(expand = c(.01, .01),limits = c(.8, 8.1),breaks = 1:7,labels = c("Begain",glue::glue("Race {1:5}"), "Finish"),sec.axis = dup_axis()) +scale_y_reverse(expand = c(.05, .05),breaks = 1:16) +scale_color_manual(values = cols,guide = F) +labs(x="",y="",title = "Example of <span style='color:#D20F26'>ggbump::geom_bump() function</span>",subtitle = "processed charts with <span style='color:#1A73E8'>geom_bump()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>")+theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "gray50",face = 'bold',size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=12,color = "gray50"),plot.caption = element_markdown(face = 'bold',size = 10),plot.background = element_rect(fill = "black", color = "black"),panel.background = element_rect(fill = "black", color = "black"),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),axis.text.x.top = element_text(size = 9,color = "grey95",family = "Cinzel",face = 'bold'),axis.text.y.left = element_blank(),axis.ticks = element_blank())

(这里涉及到很多关于主题设置的语句,小编在绘制之后可是又对一些常用的语句熟悉了一遍哦,希望小伙伴们多练习)

Exercise2 Of geom_bump

geom_sigmoid()绘图函数

对于该函数,我们还是通过构建数据进行绘制:

data_test <- tibble(x = c(0.5,0.5,1,1,1,1,1,1),xend = c(1, 1, 3, 3, 3 ,3, 3, 3),y = c(4, 4, 6, 6, 6, 2, 2, 2),yend = c(6,2,7,6,5,3,2,1),group = c("Python","R","Numpy","Pandas","Matplolib","Dplyr","Data.table","Ggplot2")
)
#可视化绘制
charts04_cus <- ggplot(data_test) +geom_sigmoid(data = data_test %>% filter(xend < 3),aes(x = x, y = y, xend = xend, yend = yend, group = factor(group)),direction = "x", color = "#cb7575", size = 2, smooth = 6) + geom_sigmoid(data = data_test %>% filter(group %in% c("Numpy","Pandas","Matplolib")),aes(x = x, xend = xend, y = y, yend = yend, group=group),direction = "x",color = "#cb7575", size = 2, smooth = 12) + geom_sigmoid(data = data_test %>% filter(y==2),aes(x = x, xend = xend, y = y, yend = yend, group=group),direction = "x",color = "#cb7575", size = 2, smooth = 11) + geom_label(data = tibble(x = 0.1, y = 4, label = "DataScience"), aes(x, y, label = label), inherit.aes = F, size = 10, color = "white", fill = "#004E66",family = "Cinzel",nudge_x = -.15) + geom_label(data = data_test %>% filter(xend < 3),aes(x = xend, y = yend, label = group),inherit.aes = F, size = 8, color = "white", fill = "#004E66", family = "Cinzel",hjust=0.5,nudge_y = .45,nudge_x = .3)+geom_label(data = data_test %>% filter(xend == 3),aes(x = xend, y = yend, label = group),inherit.aes = F, size = 7, color = "white", fill = "#004E66", family = "Cinzel",hjust=0) +labs(x="",y="",title = "Example of <span style='color:#D20F26'>ggbump::geom_sigmoid() function</span>",subtitle = "processed charts with <span style='color:#1A73E8'>geom_sigmoid()</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>")+scale_x_continuous(limits = c(-.5,4)) + theme(plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "gray50",face = 'bold',size = 20, margin = margin(t = 1, b = 12)),plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=12,color = "gray50"),plot.caption = element_markdown(face = 'bold',size = 10),panel.grid = element_blank(),axis.line = element_blank(),axis.ticks = element_blank(),axis.text.y = element_blank(),axis.title.y = element_blank(),axis.text.x = element_blank(),panel.background = element_rect(fill = "#353848"),plot.background = element_rect(fill = "#353848",colour = "#353848"))

(还是一样,使用了很多常用的主题设置语句,希望小伙伴们掌握、熟悉)

Exercise Of geom_sigmoid

总结

今天小编推送的可视化技巧可用于对比排名虽时间变化趋势变化,希望小伙伴们可以在实际工作中灵活运用此技巧。此外,小编还建议大家熟悉下用于定制化图表的相关语句哦,当然,如果喜欢用主题那就另当别论了哈~~

---------End---------

后台回复「微信群」,将邀请加入读者交流群。

《Python知识手册》| 《Markdown速查表》|《Python时间使用指南》|《Python字符串速查表》|《SQL经典50题》|《Python可视化指南》|《Plotly可视化指南》|《Pandas使用指南》|《机器学习精选》

????分享、点赞、在看,给个三连击呗!???? 

这种精美的“排序图”怎么做?相关推荐

  1. windowbuilder怎么加背景图_小红书引流:爆款笔记封面图怎么做?(内附教程)...

    大家好,我是小柯老师. 今天,我想给大家带来分享的主题是<小红书引流:爆款笔记封面图怎么做?> 很多宝宝在接触小红书博主这个行业之前,在听到一个有一定粉丝基础的博主仅仅通过写一篇笔记就可以 ...

  2. php怎么创建两条折线图,excel折线图怎么做两条

    excel折线图怎么做两条? 1.随便编两组数据,这两组数据横坐标的值以及数量都不相同,要求将这两组数据做成一张折线图. 2.首先选中第一组数据,点击插入--散点图--选择带直线和数据标记的散点图(就 ...

  3. matlab相关性分析频谱_利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]

    <利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]>由会员分享,可在线阅读,更多相关<利用Matlab绘制正弦信号的频谱图并做相关分析[共6页](6页珍藏版)>请在人 ...

  4. 简单excel饼状图怎么做,bi工具怎么做饼状图

    饼状图是为了在一个整体体现个体所占的比例,比如一块蛋糕每人各分多大份.了解了饼状图的含义,就来学习饼状图怎么做吧. 首先,我们准备excel表格饼状图的初始数据 然后选择excel表格上方的插入,选择 ...

  5. html中制作banner,css banner轮播图怎么做?

    css banner轮播图怎么做?下面本篇文章给大家简单介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 初步了解动画效果吧.轮播图我一直以为靠jquery插件完成的,突然发 ...

  6. python中画折线图不同颜色的两段_matplotlib绘制精美的折线图——另附颜色、形状查找表...

    0 配置及环境 系统: win7 x64 python: 3.64 x64 包: matplotlib.numpy 本文主要是讲述如何利用python的matplotlib包来绘制精美的折线图,包括绘 ...

  7. python绘制人际关系图_干货!利用Python绘制精美网络关系图

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨tan45du 来源丨袁厨的算法小屋(ID:t ...

  8. 图片怎么做雕刻路径_精雕图怎么做路径

    原标题:精雕图怎么做路径 精雕软件作为雕刻行业常用的一款雕刻软件,JDPaint是精雕科技多年来一直致力研制开发的.具有自主版权的.功能强大的专业雕刻CAD/CAM软件.JDPaint是精雕CNC数控 ...

  9. 动态图GIF动态图怎么做?上传动态效果图到你的csdn?

    动态图GIF动态图怎么做?上传动态效果图到你的csdn? 微信订阅号.CSND.博客等等很多地方都会用到GIF图,如何自己制作.这里直接提供工具. GIF工具下载:http://download.cs ...

最新文章

  1. Base64编码原理与应用
  2. 利用helloworld来检测VPS的对外端口是否打开
  3. CentOs6.5 修改主机名
  4. Akka源码分析-Akka Typed
  5. python编程心得体会-python核心编程____学习心得____part1
  6. 压缩包加密破解常见方法总结 CTF中Misc必备
  7. 台式计算机屏幕出现数字模拟,电脑显示器黑屏左上角显示数字模拟什么回事
  8. PyTorch-训练可视化
  9. 计算机地图制图的生产流程包括,2012注册测绘师综合:计算机地图制图生产工艺...
  10. 10余智慧项目建设初见成效 南岸用智慧城市开启智慧生活
  11. 第二阶段(day07)bootstrap
  12. ....他乡遇故知....
  13. 【zabbix监控三】zabbix之部署代理服务器
  14. 电源拓扑结构优缺点比较-常见开关电源优缺点对比
  15. flask学习:开发一个微电影网站一:项目介绍
  16. 2020年 30K的前端架构面试题总结(持续更新)
  17. 惠普刀片服务器做VM虚拟化-C7000
  18. macOS+matlab 2020b matlab_bgl工具箱使用时 MEX文件编译出错
  19. js 延迟几秒执行ifarme_用JS控制iframe里的页面,做到3秒自动换一个。
  20. 搭建前端组件库(二)

热门文章

  1. 蔡康永的情商课-笔记
  2. 【HISI系列】之HISI芯片码率控制使用说明
  3. 第一批用基因编辑工具定制DNA的婴儿即将诞生?
  4. 基于OpenWrt的Wol(wake on lan)远程唤醒
  5. G003-182-18组
  6. 1分钟链圈 | 区块链从业者平均年收入在20万元左右!纳斯达克报告:只有5%的IT供应商部署了区块链...
  7. C语言 线程的回收与子线程返回值的接收
  8. Python批量复制一个文件夹中的全部excel数据并粘贴至一个excel文件中-openpyxl模块
  9. 华为机试:火星符号运算
  10. 北斗卫星重要信息汇总