读者投稿|绘制一系列黑白印刷风格图表

简介: 让使用者将注意力集中在参数设定与调整上,而不是代码使用的细节,类似于一个芯片封装的过程。对几个常用的绘图函数进行了封装,并调整为印刷风格供使用者做课题或写论文参考。

1. 基本说明


1.1 本包的目标

让使用者将注意力集中在参数设定与调整上,而不是代码使用的细节,类似于一个芯片封装的过程。对几个常用的绘图函数进行了封装,并调整为印刷风格供使用者做课题或写论文参考。


1.2 功能特色

设定好参数后,只需要一行代码便能绘制出印刷风格的 R 图像。


1.3 数据说明

本包内置数据集均为随机或手动生成,输入以下命令能够看到对应绘图函数的详细说明。

help(acchist)  #堆积柱状图黑白印刷风格绘制
help(bonbon)  #棒棒图黑白印刷风格绘制
help(boxeasy)  #箱线图黑白印刷风格绘制
help(densline)  #核密度图黑白印刷风格绘制
help(easyline)  #简单折线图黑白印刷风格绘制
help(histeasy)  #柱状图图黑白印刷风格绘制
help(linepoint)  #加点折线图黑白印刷风格绘制
help(pyramid)  #金字塔图黑白印刷风格绘制


1.4 其他说明

  1. 输入实际参数所对应的概念或者说变量准确的话,会自动转换数据类型为包函数运行所需的数值或字符型,无需手动转换。
  2. 本包内各绘图函数会自动判断是否安装或载入了所依赖的包,如 tidyverse 或 grid,无需每次手动安装或载入。(标准方法是封装函数时头挂一个依赖某包的关键字,不过本包为初学时封装,所以采用了包函数内增加代码判断的做法,读者查看包内源代码时应当能注意到)
  3. 人性化地内置了训练数据集,让使用者方便与自己的数据集数据结构进行比对,只要数据结构与训练数据集保持一致,就能绘制出对应的图形。
  4. 添加了简单的内存释放代码,每次绘图完成后无需清理内存中产生的临时数据。
  5. 为防止部分使用者因为系统问题和我一样出现渲染错误的情况,采取两次添加画布的做法,完成强制绘图,保证绘图过程顺利。


1.5 特别鸣谢

微信公众号“庄闪闪的 R 语言手册”提供的学习交流平台;自“ tidy-R语言”群的哈尔滨商业大学张敬信教授,以及 Fin,无安书等群友在本包封装过程中给出的宝贵建议。


1.6 申明

本包封装纯属公益性质,目前为 0.1 版,后面估计不会有太多时间更新。大家可以自行在本包基础上进行改装。如确有难以解决的 BUG,请联系西南财经大学经济学院杜云晗 1270950448@qq.com。


2. 使用示例


2.1 安装说明

第一次使用需从 Github 安装,如下:

rm(list = ls())
if (is.element("chip", installed.packages()[, 1]) == FALSE) {
  if (is.element("devtools", installed.packages()[, 1]) == FALSE) {
    install.packages("devtools")
    library(devtools)
  } else if (is.element("devtools", installed.packages()[, 1]) == TRUE) {
    library(devtools)
  }
  install_github("youngyaoguai/Rdraw/chip0.1/chip")
  library(chip)
} else if (is.element("chip", installed.packages()[, 1]) == TRUE) {
  library(chip)
}

由于网络问题而无法下载的读者,请用百度网盘直接下载压缩包,链接为:https://pan.baidu.com/s/1Xhu8DH4bcjw8AedRIb3Dbw 提取码:8712。然后本地安装该包,具体教程见:如何本地安装 R 包


2.2 堆积柱状图黑白印刷风格绘制

help(acchist)  #查看函数说明
data("acchist_test_data",package = "chip")  #加载包内置数据集
View(acchist_test_data)  #查看内置数据集结构
axis.x.title <- c("region")   #x轴标题
axis.y.title <- c("ratio")    #y轴标题
individual.name <- c("B","C","D","E","F")  #区域名称
fill.name <- c("academic","vocational","college","high","further","primary")  #要填充的名称
bar_width <- 0.3   #柱子宽度
axis.title.size <- 30  #坐标轴标题大小
axis.text.x.size <- 30  #x轴的文本显示大小
axis.text.y.size <- 30  #y轴的文本显示大小
legend.text.size <- 30  #图例的文本显示大小
legend.title.size <- 30  #图例标题大小
#调用绘图函数
acchist(acchist_test_data,acchist_test_data$region,acchist_test_data$edu,acchist_test_data$ratio)

%EHDY9PS{B84AL~@J)G)V]6.png


图1 堆积柱状图黑白印刷风格绘制


2.3 棒棒图黑白印刷风格绘制

help(bonbon)  #查看函数说明
data("bonbon_test_data",package = "chip")  #load integration sample data  #载入内置数据集
View(bonbon_test_data) #查看数据结构
#要着重显示的个体(如果没有要着重显示的个体,请设置为outstanding <- c(“ ”))
outstanding <- c("wholesaleretail","Leasing and business services","realestate") 
outstanding.label <- c("24.75%","28.51%","5.16%") #要着重显示的个体的数据标签,需要和outstanding一并调整
outstanding.label.size <- 7  #要着重显示的个体的数据标签大小
outstanding.size <- 4    #要着重显示的个体的棒状物大小
not.outstanding.size <- 2.3  #不需要着重显示的个体的棒状物大小
outstanding.head.size <- 7  #要着重显示的个体的棒状物圆头大小
not.outstanding.head.size <- 5   #不需要重显示的个体的棒状物圆头大小
axis.title.x.size <- 30     #x轴标题大小
axis.text.y.size <- 30     #y轴的文本大小
value.max <- 100   #样本最大值
value.break <- c(0,value.max%/%3,78,100)   #要在x轴上显示的样本数值点
xlab.name <- c("ratio of service industry(%)")  #x轴标题
#所有个体名称排序,会按照从左往右的顺序绘制,绘制结果为从下到上
individual.name <- c("Leasing and business services","wholesaleretail","scientificresearch","Accommodation and Catering","Informationtransmission","culture","socialwork","publicfacilities","residentsservice","financial","education","transportation","publicmanagement","realestate")
bonbon(bonbon_test_data,bonbon_test_data$industry,bonbon_test_data$index)

image.gif4[RQX5VAUD}J4KJ%_PQQTJW.png

图2 棒棒图黑白印刷风格绘制


2.4 箱线图黑白印刷风格绘制

help(boxeasy)  #查看绘图函数说明
data("box_test_data",package = "chip")  #载入内置数据集
View((box_test_data) #查看数据结构
     ylab.name <- c("index")       #y轴标题
     xlab.name <- c("year")  #x轴标题
     axis.title.x.size <- 15  #x轴标题大小
     axis.title.y.size <- 15  #y轴标题大小
     axis.text.x.size <- 15  #x轴文本大小
     axis.text.y.size <- 15  #y轴文本大小
     #调用函数
     boxeasy(box_test_data,box_test_data$year,box_test_data$index)

IJL3]NLK`%G2A`41GJ7ZWKG.png


图3 箱线图黑白印刷风格绘制


2.5 简单折线图黑白印刷风格绘制

help(easyline)  #查看函数说明
data("easyline_test_data",package = "chip")  #载入内置数据集
View(easyline_test_data) #查看数据结构
ylab.name <- "population" #y轴标题
xlab.name <- "age" #x轴标题
axis.title.x.size <- 25 #x轴标题大小
axis.title.y.size <- 25#y轴标题大小
axis.line.x.thickness <- 0.5 #x轴粗细
axis.line.y.thickness <- 0.5 #y轴粗细
axis.text.x.size <- 20  #x轴文本大小
axis.text.y.size <- 20 #y轴文本大小
x.start <- 0  #x轴开始数值
x.end <- 100 #x轴结束数值
x.interval <- 10 #x轴数值间隔
y.start <- 0 #y轴开始数值
y.end <- 21571 #y轴结束数值
y.interval <- 5000 #y轴数值间隔
#调用函数
easyline(easyline_test_data,easyline_test_data$population,easyline_test_data$age)

F)45ZIXB`Y72YJ`)$FLLY]C.png


图4 简单折线图黑白印刷风格绘制


2.6 核密度图黑白印刷风格绘制

help(densline)  #查看说明
data("densline_test_data",package = "chip")  #载入内置数据集
View(densline_test_data)  #查看数据结构
yscope <- c()  #第一次使用无法知道具体的范围,填空
xscope <- c() #第一次使用无法知道具体的范围,填空
#根据数据集从左往右填写
legend.name <- c("line1","line2","line3","line4","line5")
#调用函数
densline(test_data)
#根据图示大概知道数值范围,进行微调
yscope <- c(0.0004,0.00155) 
xscope <- c(0,1000)  
legend.name <- c("line1","line2","line3","line4","line5")
densline(densline_test_data)

image.gifD9B$)SY]W_3M628EE}M5TD7.png

图5 核密度图黑白印刷风格绘制


2.7 柱状图黑白印刷风格绘制

help(histeasy)  # 查看帮助
data("hist_test_data ",package = "chip")  #载入内置数据集
View(hist_test_data)   #查看数据结构
x.size <- 2  #x轴文本大小
y.size <- 2  #y轴文本大小
lab.size <- 2  #坐标轴标题大小
legend.x <- 30   #图例水平位置
legend.y <- 0.3   #图例垂直位置
legend.x.distance <- 0.1  #图例中图片和文本的距离
axisname.x <- c("region")  #x轴标题
axisname.y <- c("ratio")  #y轴标题
type.name = c("0-14","15-64","65+","immortality")  #不同类别
individual.name=c("A","B","C","D","E")   #不同个体
histeasy(hist_test_data,hist_test_data$region,hist_test_data$age,hist_test_data$ratio)

TQT]6HHRO687RL25G1UE95X.png


图6 柱状图黑白印刷风格绘制


2.8 加点折线图黑白印刷风格绘制

help(linepoint)
data("line_test_data",package = "chip")  
View(line_test_data)  #查看内置数据集数据结构
start <- 2009  #x轴开始数值
end <- 2019  #x轴结束数值
interval <- 2  #x轴数值间隔
axis.text.x.size <- 30  #x轴文本大小
axis.text.y.size <- 30  #y轴文本大小
legend.title.size <- 30  #图例标题大小
legend.text.size <- 30   #图例文本大小
axis.title.x.size <- 30  #x轴标题大小
axis.title.y.size <- 30  #y轴标题大小
axis.line.x.size <- 0.5  #x轴粗细
axis.line.y.size <- 0.5  #y轴粗细
geom.point.size <- 7  #折线点大小
ylab.name <- c("index")  #y轴标题
xlab.name <- c("year")  #x轴标题
individual.name <- c("A","B","C","D","E")  #个体名称
legend.name <- c("region")  #图例标题
linepoint(line_test_data,line_test_data$region,line_test_data$index,line_test_data$year)

WK[2_F`KDD{C0Q`(6F74Q6C.pngimage.gif

图7 加点折线图黑白印刷风格绘制


2.9 金字塔图黑白印刷风格绘制

help(pyramid)
View(pyramid_test_data)  #查看内置数据集数据结构
data("pyramid_test_data",package = "chip")  #load integration sample data
v_max <- 4400  #样本中的最大数值
middle.size <- 6.6  #中间文本大小
left.axis.title.x.size <- 30  #左边x轴标题大小
left.axis.text.x.size <- 30  #左边x轴文本大小
right.axis.title.x.size <- 30  #右边x轴标题大小
right.axis.text.x.size <- 30  #右边x轴文本大小
right.title <- c("女")  #右边x轴标题
left.title <- c("male")  #左边x轴标题
pyramid(pyramid_test_data,pyramid_test_data$male,pyramid_test_data$female,pyramid_test_data$group,pyramid_test_data$group_name)

]C8D7R3V5NKFC$QXVL]00_T.png

图8 金字塔图黑白印刷风格绘制


3. 绘图失败的解决办法


  1. 解压缩包内绘图函数,并利用 source 函数加载包里绘图函数,在本地进行绘制,或者查看绘图函数本身是否有 BUG。
  2. 使用 AI 修图,具体推文见:画图细节不会改?那就用 AI 吧!
目录
相关文章
|
3月前
|
域名解析 存储 资源调度
Excalidraw——部署一个手绘风格的画图工具
Excalidraw——部署一个手绘风格的画图工具
86 3
|
6月前
|
数据可视化 测试技术 uml
【掌握绘图艺术】用PlantUML绘制完美UML图表,开发者的福音
【掌握绘图艺术】用PlantUML绘制完美UML图表,开发者的福音
1174 1
|
6月前
|
人工智能 数据可视化 算法
Matplotlib从入门到精通05-样式色彩秀芳华
Matplotlib从入门到精通05-样式色彩秀芳华
Matplotlib从入门到精通05-样式色彩秀芳华
|
6月前
|
缓存 数据库 数据安全/隐私保护
我绘制文章插图的三个神级工具
我绘制文章插图的三个神级工具
109 0
|
前端开发
论文图形配色杂乱? 一键帮你轻松解决!
论文图形配色杂乱? 一键帮你轻松解决!
164 0
|
数据挖掘 Python
Python数据分析与展示:图像的手绘效果-5
Python数据分析与展示:图像的手绘效果-5
184 0
Python数据分析与展示:图像的手绘效果-5
|
存储 C++ Windows
眼前一亮!2款免费手绘风流程图绘制工具
“这种风格的流程图好漂亮啊,请问是用什么工具画的啊?”
眼前一亮!2款免费手绘风流程图绘制工具
|
算法 前端开发
手把手教你实现手绘风格图形🔵
手把手教你实现手绘风格图形🔵
209 0
手把手教你实现手绘风格图形🔵
R绘图 | 一幅小提琴图的美化之旅
R绘图 | 一幅小提琴图的美化之旅
559 0
R绘图 | 一幅小提琴图的美化之旅
|
搜索推荐 Java
这个开源项目绝绝子,一键生成好玩的矢量风格头像!
最近逛 GitHub,发现了一个非常好玩的开源项目——头像生成器,给大家分享一下~
582 0
这个开源项目绝绝子,一键生成好玩的矢量风格头像!