【R语言】可视化:ggplot代码的自动生成
【R语言】可视化:ggplot代码的自动生成
- 前言:
- 准备
- 1. 设置 Settings
- 2. 面板和背景 Panel & Backgroud
- 3. 坐标轴 Axis
- 4. 标题与标签 Title and label
- 5. 图例 Legend
- 6. 子标题和图注 Subtitle and Caption
- 7. 编辑结果导出绘图代码
前言:
你是否有同样的疑问,用R语言实现可视化时,会遇到非常多的问题,数据类型报错,参数过多记忆不过来,图层关系混乱等等, 看到谢大神这个文章,非常棒,共勉:
ggThemeAssist:鼠标调整主题,并返回代码
R语言中的ggplot2是最美的绘图包之一。但调整主题的细节,需要写大量代码,而且反复修改、预览,费时费力。
当然你可以用Adobe Illustrator等工具进行后期编辑,但要是图重画,所有后期编辑的工作又要重来,无法实现可重复分析,每个修改都很崩溃。
有没有更方便的方式调整主题细节呢?
ggThemeAssist横空出世,它依赖shiny (>= 0.13), miniUI (>= 0.1.1), rstudioapi (>= 0.5), ggplot2, formatR,可以对ggplot2图形结果直接修改,并实时预览效果,同时编辑结束返回代码。相当于一个帮你写代码的翻译官!
准备
此包必须在Rstudio环境中使用,运行下面代码:
# install.packages("ggThemeAssist")
library(ggplot2)
library(ggThemeAssist)
# 使用mtcars生成一个点图示例
gg <- ggplot(mtcars, aes(x = hp, y = mpg, colour = as.factor(cyl))) + geom_point()
# 开始调整主题
ggThemeAssistGadget(gg)
看到打开了一个窗口,上部为图形预览窗口,下部有6个选项卡,分别对应各类主题细节的调整,下面我们进行详细解释。
1. 设置 Settings
绘图维度 Plot dimensions
Width、Height可鼠标点击数值文本框右侧箭头微调图片宽、高尺寸,也可直接修改数字。
通用选项 General options
Use FormatR 选项可以格式化输出的R代码更具可读性,这可是R界大神,统计之都和R语言大会创始人谢益辉写的包。
默认勾选时,输出代码示例格式:
gg + theme(panel.background = element_rect(fill = NA), plot.background = element_rect(fill = NA))
不勾选,编辑后返回代码格式如下:
gg + theme(panel.background = element_rect(fill = NA), plot.background = element_rect(fill = NA))
默认选项更利用阅读,但占用多行。选择全凭个人喜好,推荐勾选,可实现多行并缩进排版,方便阅读和同行交流。
Multiline results 选项是输出绘图代码一行行独立累加主题实现,还是行相加所有参数实现。
默认格式,不勾选多行,推荐,示例如下:
gg + theme(panel.grid.major = element_line(linetype = "solid"), panel.grid.minor = element_line(linetype = "solid"), plot.background = element_rect(linetype = "blank"))
勾选多行格式,示例如下,此种方案方便累加和后退去除参数,但变量多次重复出现,各有利弊:
gg <- gg + theme(panel.grid.major = element_line(linetype = 'dashed'))
gg <- gg + theme(panel.grid.minor = element_line(linetype = 'dashed'))
gg <- gg + theme(panel.background = element_rect(fill = 'gray87'))
2. 面板和背景 Panel & Backgroud
绘图区背景 Plot Background
即整个作图区的背景,包括填充色Fill,外边框类型Type、线宽Size和颜色Colour
面板背景 Panel Backgroud
即坐标轴围成的数据分布区域,属性同上,包括填充色Fill,外边框类型Type、线宽Size和颜色Colour
主网格 Grid Major
即图中X、Y轴刻度线对应的网格,建议使用,方便辅助识别数据位置;
次网格 Grid Minor
即图中X、Y轴刻度线间的补充网格,看具体情况使用,方便进一步辅助识别数据准确位置;
3. 坐标轴 Axis
坐标轴文字 Axis text
Family:字体家族,默认为Sans,和我们常用的Arial类似;还常用Courier系列等宽字体,如显示核酸、蛋白序列对齐要求时使用;Helvetica是Science杂志推荐字体;
Face: 字体样式,如标准 plain(Adobe系列软件称Regular)、加粗 bold、斜体 italic、粗斜体 bold.italic
Size:字体大小,推荐8(无纸质版在线网络杂志,如Nature Communication、Communication Biology、Scientific Report等);可选7,适合Nature、Science最终发表字体大小;最小不要小于5,否则看不清。
Colour:颜色,默认为30%灰度 gray30,想突出坐标同刻度数值,可选black或gray0;
Hjust:X轴刻度值水平位置调整,默认0.5为相对刻度线居中对齐,0为刻度线左对齐;1为刻度线右对齐
Vjust:Y轴刻度值垂直位置调整,默认0.5为相对刻度线居中对齐,0为刻度线下对齐;1为刻度线上对齐
Angle:坐标轴角度,如标签过长,可调为30度或45度旋转避免文字重叠且节约空间,一般要配合Hjust为1右对齐才更美观;一般情况下要对x或y轴单独修改
坐标轴x文字属性 Axis text.x
默认可不修改,自动继承Axis text的属性。仅用于x轴属性需单独设置时修改,解释同上
坐标轴y文字属性 Axis text.y
默认可不修改,自动继承Axis text的属性。仅用于y轴属性需单独设置时修改,解释同上
坐标轴线属性 Axis line
主要修改X/Y轴的线型Type、宽度Size和颜色Colour
刻度线 Axis ticks
同坐标轴线,可修改X/Y轴的线型Type、宽度Size和颜色Colour
4. 标题与标签 Title and label
标签 Lable
Title:图表标题,直接输入即可,方便吧
x-Axis label: 添加X轴标签
y-Axis label: 添加y轴标签
Colour:图例标题
Fill label:填充色标签
Size label:点大小标签
Alpha label:透明度标签
Linetype label:线型标签
Shape label:形状标签
标题属性 Plot Title
与坐标轴属性类似,详见前面“坐标轴文字 Axis text”说明
Family:字体家族
Face: 字体样式,如标准plain、加粗bold、任何italic、粗斜体bold.italic
Size:字体大小,标题可以使用12,即标准字体系1.5倍,并加粗
Colour:颜色
Hjust:沿X轴水平位置调整
Vjust:沿Y轴垂直位置调整
Angle:文字旋转角度,逆时针
坐标轴标签属性 Axis Labels
解释同上
5. 图例 Legend
图例位置 Legend position
Position:位置,可选无none,左left,右right,上top,下buttom,图中XY
Direction:方向,可按水平horizontal,或垂直vertical排列
图例标题属性 Legend Title
Family:字体家族
Face: 字体样式
Size:字体大小,可调8-10,个人喜欢和坐标轴同样大小,有人喜欢大点
Colour:颜色
图例文字属性 Legend Text
同上
图例背景属性 Legend Background
括填充色Fill,外边框类型Type、线宽Size和颜色Colour
图例核心属性 Legend Keys
即图例中颜色图状的属性,同上
6. 子标题和图注 Subtitle and Caption
可以修改子标题(Subtitle)和图注(Caption)中的内容。同时可修改文字的属性,如字体家族、样式、大小、颜色和水平位置
7. 编辑结果导出绘图代码
以上面板中可修改上百个参数,并提供几百个属性值的选择。这些要是靠自己记住,那可真是太难了。此包为R语言绘图的细节调提供了极大帮助。
而且调好的样式,点击done完成,马上写书规范的代码就写好了,方便可重复计算和进一步修改。这就是代码的强大之处。
gg + theme(plot.subtitle = element_text(size = 8, colour = "gray25", hjust = 0.25), axis.line = element_line(linetype = "dotdash"), panel.grid.minor = element_line(colour = "gray95", linetype = "dotted"), axis.text = element_text(size = 8, face = "bold", colour = "black", hjust = 1), axis.text.x = element_text(size = 1, angle = 45), legend.key = element_rect(fill = "antiquewhite4"), legend.background = element_rect(fill = "gray93", colour = "antiquewhite4", size = 1, linetype = "solid")) +labs(title = "Title for figure ", x = "x-Axis label", colour = "汽纲数量", fill = "fill title", subtitle = "Subtitle")
注意:在使用中最好不要用中文,否则会出现缺失引号代码无法运行的情况,自己手动添加引号括上中文即可运行。
以上展示过程的R环境信息
> sessionInfo()
R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17134)Matrix products: defaultlocale:
[1] LC_COLLATE=Chinese (Simplified)_China.936 LC_CTYPE=Chinese (Simplified)_China.936
[3] LC_MONETARY=Chinese (Simplified)_China.936 LC_NUMERIC=C
[5] LC_TIME=Chinese (Simplified)_China.936 attached base packages:
[1] stats graphics grDevices utils datasets methods base other attached packages:
[1] shiny_1.3.2 ggThemeAssist_0.1.5 ggplot2_3.1.1 loaded via a namespace (and not attached):[1] Rcpp_1.0.1 pillar_1.4.1 compiler_3.6.0 formatR_1.7 later_0.8.0 plyr_1.8.4 tools_3.6.0 [8] digest_0.6.19 jsonlite_1.6 tibble_2.1.3 gtable_0.3.0 pkgconfig_2.0.2 rlang_0.3.4 cli_1.1.0
[15] rstudioapi_0.10 withr_2.1.2 dplyr_0.8.1 grid_3.6.0 tidyselect_0.2.5 glue_1.3.1 R6_2.4.0
[22] sessioninfo_1.1.1 purrr_0.3.2 magrittr_1.5 scales_1.0.0 promises_1.0.1 htmltools_0.3.6 assertthat_0.2.1
[29] mime_0.6 colorspace_1.4-1 xtable_1.8-4 httpuv_1.5.1 labeling_0.3 miniUI_0.1.1.1 lazyeval_0.2.2
[36] munsell_0.5.0 crayon_1.3.4
总体来说,是非常棒的一个包了,如此好货楼主也第一时间进行了实测。
分享下自己感受:
- 效率非常高,如果是日常使用,在仅需调个别参数情况下,非常高效;
- 避免了参数记忆的问题,ggplot参数过多,容易记混,该包完美避开;
- 实用性较高,不禁联想数据格式处理的时候是否也能如此;
发现小问题:
- 测试中,楼主也发现些小问题。 如:编辑菜单中:Subtitle and Caption输入内容和导出结果。
当输入中文时,生成代码为:subtitle = 中文测试引号问题, 存在引号的问题,运行代码时会报错,需要添加“”;
当输入英文时,生成代码为:subtitle = “test problem” ,含引号不报错;
当输入中英文时,生成代码为:subtitle = “test 引号问题” ,含引号不报错;
当输入英中文时,生成代码为:subtitle = "引号问题 test " ,含引号不报错;
猜测原因可能是Rsudio一直的中文编译问题,和input string 1 is invalid in this locale同样,也可能是其他问题。
总体来说,还是非常棒的一个包。
- 特别不舒服的一个点:
gg <- ggplot(mtcars, aes(x = hp, y = mpg, colour = as.factor(cyl))) + geom_point()
ggThemeAssistGadget(gg)# 一直以为ggThemeAssistGadget(定义) 这个地方可以自定义的,然并软,竟然必须是gg....
原:[ggThemeAssist:鼠标调整ggplot2主题,不用再记这些代码啦!]
【R语言】可视化:ggplot代码的自动生成相关推荐
- c语言创建可视化窗口,一种基于可视化界面绘制图形自动生成C语言代码软件的设计与实现...
第 35 卷第 9 期 计算机应用与软件 Vol. 35 No. 9 2018 年 9 月 Computer Applications and Software Sep. 2018 一种基于可视化界面 ...
- 数据可视化——R语言为ggplot图形添加P值和显著性水平
数据可视化--R语言为ggplot图形添加P值和显著性水平 准备 安装和加载R包 示例数据 均值比较的方法 用于添加P值的R函数 compare_means() stat_compare_means( ...
- R语言可视化R原生plot函数与ggplot可视化结果组合、整合输出实战:原生R绘图plot函数可视化、ggplot2包可视化、R原生plot函数与ggplot可视化结果组合
R语言可视化R原生plot函数与ggplot可视化结果组合.整合输出实战:原生R绘图plot函数可视化.ggplot2包可视化.R原生plot函数与ggplot可视化结果组合 目录
- R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签、删除ggplot可视化图中的所有x轴轴标签实战
R语言删除ggplot可视化图中的所有x轴轴标签实战:ggplot可视化默认包含所有x轴轴标签.删除ggplot可视化图中的所有x轴轴标签实战 目录
- R语言可视化学习笔记之ggridges包绘制山峦图
作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源. 严涛老师的绘图教程还有: gganimate |诺奖文章里面的动图绘制教程来了!! ggplot2学习笔记之 ...
- R语言可视化——REmap动态地图
作者简介Introduction 杜雨:EasyCharts团队成员,R语言中文社区专栏作者. 兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化. 个人公众号:数据小魔方(微信ID ...
- R语言可视化——ggplot2画回归曲线
目录 0引言 1.构造回归数据 2.画图 2.1载入包 2.2 准备数据添加散点 2.3添加回归线 2.5 添加公式R方 2.6 添加方差分析表 2.6 回归数据调整 3.总结 0引言 在数据可视化- ...
- R语言可视化【ggplot2】
R语言可视化[ggplot2] 文章的文字/图片/代码部分/全部来源网络或学术论文或课件,文章会持续修缮更新,仅供学习使用. 目录 R语言可视化[ggplot2] 一.可视化介绍 二.不同情况适用的图 ...
- 【R语言可视化】-- 环形柱状图
前言 上一节师兄给大家介绍了在R语言中,常用的柱状图绘图技巧!如柱状图分组.调色.堆积柱状图.柱状图加误差棒等等!这一小节师兄准备带大家玩点有意思的!把柱状图画成环状的!别看成了饼图哦!它们还是柱状图 ...
最新文章
- 《Lancet》发表全球学者联合声明!
- SQL 左连接(left join) 排序 分页 中遇到的未按理想状态排序分页的解决方案
- 给定数组 求和等于固定值 算法_[见题拆题] 大厂面试算法真题解析 - 第一期开张...
- inxni扫地机器人_实用型助手,inxni以内扫地机器人 X332
- 利用fiddler将本地网页放到某个域下
- VS2008如何添加 OLE/COM 对象查看器 .
- java并发编程之4——Java锁分解锁分段技术
- 软件测试个人心得总结
- Asp.Net Core 第05局:读取配置
- c++二维数组指针详解
- IDEA工具开发必备设置-极大提高开发效率
- LeetCode 120. 三角形最小路径和
- Elasticsearch的JavaAPI
- 开启MyBatis(三)工作原理
- whitepages 配合调查_“你好,我是警察!请配合我们的调查......”_政务_澎湃新闻...
- spss分析方法-因子分析(转载)
- matlab 中norm函数的用法
- typedef struct LNode *p和typedef struct LNode笔记
- 如何用代码模拟自由落体
- PHP编写投屏功能,win10如何投屏到电视
热门文章
- hp服务器性能oid,HPE Integrity rx2800 i6 服务器
- 室内外蓝牙定位巡更电子胸牌
- BigDecimal 除法运算提示:java.lang.ArithmeticException: Non-terminating decimal expansion; no exact repres
- C# 驱动卸载 / UniSysDriver
- java简易美颜相机
- 基于nginx-rtmp-module搭建直播系统
- 自动驾驶采标系列一:自动驾驶数据采集资质及采集数据出境的调研分析
- 17万字 JUC 看这一篇就够了(三) (精华)
- 科技巨头之间的生态系统之战
- NBA球队实力榜:多伦多猛龙领跑 勇士升至第4