简介

在本章中学会如何使用ggplot2主题(theme)系统,主题系统允许对于图像中的非数据元素进行精细的调整。它不会影响几何对象和标度等数据元素。主题不能改变图像的感官性质,但它可以使图像变得更具美观,满足整体一致性的要求。主题的控制包括字体、轴须标签(tick)、面板的条状区域(strip)、背景等

lattice和基础图形系统没有采用数据和非数据控制分离的方法,大部分函数都设定了许多参数来调整数据和非数据的外观,这很容易导致函数的复杂化,使得图像的学习变得更为困难。ggplot2则采用了不同的策略:绘图时,首先确定数据如何展示,之后再用主题系统对细节进行渲染

主题系统由四个主要部分组成

  1. 主题元素(element)制定了能控制的非数据元素。比如说,plot.title元素控制了图像标题的外观;axis.ticks.x指的是x轴上的标签;legend.key.height则是图例符号的高度
  2. 每一个元素都和一个元素函数(element function)绑定,元素函数表述了元素的视觉属性。比如,element_text()设定了字体大小、颜色,还有像plot.title()等文字元素的外观
  3. theme()函数允许通过运行元素函数来覆盖默认的主题函数,比如说theme(plot.title = element_text(color = “red”))
  4. 像theme_grey()那样的完整的主题。主题把所有的主题元素的值设置得和谐共存

比如,假设对数据创建了以下图像

base <- ggplot(mpg, aes(cty, hwy, color = factor(cyl))) +geom_jitter() +geom_abline(color = "grey50", size = 2)base

它达到了想要的效果:得知了cty和hwy高度相关,它们两者都和cyl有着强联系,而且hwy总是比cty要大(此外cty增大的话两者差值也会增大)
如果想要将图像作为论文发表,需要稍微修改一下它

  • 改善坐标轴和图例标签的效果
  • 为图像添加标题
  • 微调颜色比例
labelled <- base + labs(x = "City mileage/gallon", y = "Highway mileage/gallon", color = "Cylinders", title = "Highway and city mileage are highly correlated") + scale_color_brewer(type = "seq", palette = "Spectral")labelled

接下来,需要确保图像样式和期刊样式保持一致

  • 背景是白色的,而不是浅灰色的
  • 如果有空位的话,图例应该放在图像里面
  • 主要的网格线应该是浅灰色的,次要的网格线应该被移除
  • 图像标题应该是12磅的加粗字体
styled <- labelled +theme_bw() +theme(plot.title = element_text(face = "bold", size = 12), legend.background = element_rect(fill = "white", size = 4,color = "white"), legend.justification = c(0, 1),legend.position = c(0, 1),axis.ticks = element_line(color = "grey70", size = 0.2),panel.grid.major = element_line(color = "grey70", size = 0.2),panel.grid.minor = element_blank())
styled

最后,期刊想要600打印分辨率(dpi)的TIFF图像文件。将会在存储输出中了解到ggsave()的细节

完整的主题

ggplot2自带了很多内置主题。最重要的一个是theme_grey(),它是ggplot2的标志性主题,有着浅灰色背景和白色网格线

  1. theme_bw():theme_grey()的变种,使用了白色背景和细灰色网格线
  2. theme_linedraw():这个主题的线条只有黑色,但是线条有不同的宽度,背景是白色的,让人联想起素描的风格
  3. theme_light():类似theme_linedraw(),但是有着浅灰色的线条和坐标轴,让人更多地把注意力放在数据上面
  4. theme_dark():theme_light()的暗色风格版本,有着类似的线条大小,但是背景是灰暗色的。当想让彩色线条更加突出的时候这个主题特别有用
  5. theme_minimal():简约风格主题,没有背景标注
  6. thme_classic():经典风格主题,没有x轴和y轴线条及网格线
  7. theme_void():完全空白的主题
df <- data.frame(x = 1:3, y = 1:3)
base <- ggplot(df, aes(x, y)) + geom_point()
base + theme_grey() + ggtitle("theme_grey()")
base + theme_bw() + ggtitle("theme_bw()")
base + theme_linedraw() + ggtitle("theme_linedraw()")
base + theme_light() + ggtitle("theme_light()")
base + theme_dark() + ggtitle("theme_dark()")
base + theme_minmal() + ggtitle("theme_minimal()")
base + theme_classic() + ggtitle("theme_classic()")
base + theme_void() + ggtitle("theme_void()")

所有主题都有base_size参数,这个参数控制着基础字体大小。基础字体大小是所有坐标轴标题都会使用到的:图像标题通常来说回稍微大一些(1.2倍),轴须和条状区域的标签通常稍微小一点(0.8倍)。如果想分别控制这些字体大小,需要如下文所述那样分别修改单独的元素

除了在图像上套用完整的主题,还可以用theme_set()来修改默认主题的效果。如果不喜欢默认的灰色背景,可以运行theme_set(theme_bw())来把所有图像的背景都设为白色
除了ggplot2所内置的,还能使用其它的主题,比如ggthemes

library(ggthemes)
base + theme_tufte() + ggtitle("theme_tufte()")
base + theme_solarized() + ggtitle("theme_solarized()")
base + theme_excel() + ggtitle("theme_excel()")

完整的主题是一个很好的出发点,但是它们没有提供很多的控制细节,如果想修改某个元素,将会用到theme(),并且通过元素函数来覆盖某个元素的默认设置

ggplot2-主题1相关推荐

  1. ggThemeAssist:鼠标调整ggplot2主题,不用再记这些代码啦!

    文章目录 ggThemeAssist:鼠标调整主题,并返回代码 1. 设置 Settings 2. 面板和背景 Panel & Backgroud 3. 坐标轴 Axis 4. 标题与标签 T ...

  2. 设置图例字体_R高级画图(0903)关于字体、溪流图、ggplot2主题等设置 (tidyTuesday)...

    在使用ggplot2画图的时候如何导入字体,在使用ggplot2的时候如何处理复杂的控件.主题等,今天将一一介绍. part1 对ggplot2使用字体. 这个难点肯定就是导入字体,然后在ggplot ...

  3. ggplot2作图详解:主题(theme)设置

    转载自:http://blog.csdn.net/u014801157/article/details/24372531 凡是和数据无关的图形设置内容理论上都可以归 主题类 但考虑到一些内容(如 坐标 ...

  4. 如何用ggplot2绘制漂亮的统计图形

    导言 ggplot2 是由 Hadley Wickham 开发的一个功能十分强大的 R 语言绘图程序包,它能够非常轻松的画出各种好看的统计图形.关于 ggplot2 的教程有很多,Cédric Sch ...

  5. R语言ggplot2绘制分组箱型图和分组柱状图

    需求 论文中常见的分组箱型图和分组条形图可以直观的比较方法的效果,以一个图显示多个方法在多个数据集上的AUC或AUPR. 抽象出来的数据即包含2个分类变量和1个连续变量, 不同的方法(分类变量1)在不 ...

  6. R语言-ggplot2图形语法

    简介 在R里,主要有两大底层图层系统,一是base图形系统,二是gird图形系统.lattice包与ggplot2包正是基于gird图形系统构建的,他们都有自己独特的图形语法. ggplot2有着自己 ...

  7. R语言的ggplot2做数据可视化的一些推文合集(文末有福利)

    小明的数据分析笔记本 1.记录一些R语言和python做数据分析和数据可视化的简单小例子:2.园艺植物相关的细胞器基因组.转录组.核基因组.群体遗传学相关的文献阅读笔记.欢迎大家关注. 长按上方二维码 ...

  8. ogre绘制3d图形_R语言统计与绘图:绘制饼图

    饼图也是最常见的图形之一,饼图在商业世界中无所不在,然而多数统计学家,包括相应R文档的编写者却都对它持否定态度. 相对于饼图,更推荐使用条形图或点图,因为相对于面积,人们对长度的判断更精确. 今天来学 ...

  9. dataframe第二列 r语言_123.R简介和统计绘图

    123R简介和统计绘图 本节作者:刘永鑫 中国科学院遗传与发育生物学研究所:陈同 中国中医科学院 版本1.0.2,更新日期:2020年8月31日 本项目永久地址:https://github.com/ ...

  10. 学会这个BBC,你的图也可以上新闻啦!

    英国广播公司(British Broadcasting Corporation:BBC)是全球最大的新闻媒体,其中各类新闻稿件采用的统计图表能很好地传达信息.为了方便清洗可重复数据和绘制图表,BBC数 ...

最新文章

  1. hdu4911 简单树状数组
  2. 开源自制6通道航模遥控器,Arduino Pro Mini NRF24L01模块
  3. 寒假每日一题(提高组)【Week 1 完结】
  4. 如何结合PICgo,Typora以及阿里云对象存储OSS搭建自己图床写博客
  5. Android apk签名方法
  6. 计算机网络的拓扑结构三种基本型,2018年自考《计算机网络基本原理》试题库四...
  7. c语言打开pdf失败,c语言错误种类总结.pdf
  8. 基于用户滚动应用CSS
  9. idea整个项目乱码解决办法
  10. 分享一个百度云加速下载工具
  11. 算法64-荷兰国旗问题
  12. GIS应用技巧之空间插值理论介绍
  13. 大数据学习教程SD版第三篇【Hadoop HDFS】
  14. RFB-Net论文解读
  15. SQLAlchemy部分
  16. python新疆自驾旅游推荐系统毕业设计源码111042
  17. 订餐系统c语言代码大全,C语言订餐系统
  18. 双基因突变患者_宁夏发现世界首例双基因突变病例 患者矮小
  19. 初学VUE.js之数据绑定
  20. 调试心得plc做主站(客户端)

热门文章

  1. 比赛安排(3月28日)
  2. 手把手教你将sublime3打造成python开发利器
  3. 记录一下学习方向和进度
  4. 大数据预测的基本原理_大数据需要掌握的基本算法
  5. Unity Quaternion
  6. 视差滚动:零基础css代码实现时空穿越效果
  7. 计算机网络学习日记 Day1
  8. NECCS|全国大学生英语竞赛C类|词汇和语法|语法题|时态 非谓语动词 |19:00~20:15|完形填空·词性转化
  9. 数据库事务(Transaction)的ACID特性解释
  10. VC 获取本地ip地址