简介

在本章中学会如何使用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. 新手UI设计师必需要掌握的知识和技能
  2. Unbalanced calls to begin/end appearance transitions for XXXX
  3. Java Maven学习 - 1
  4. 【Clickhouse】问题记录
  5. python安装mysqlclient模块报fatal error: Python.h:解决方法
  6. ios(safar/微信)返回不执行js
  7. Bootstrap 字体与图标
  8. 【python】一道LeetCode搞懂递归算法!#131分割回文串 #以及刷LeetCode的一点点小心得 [数据结构与算法基础]
  9. 掌门教育微服务体系 Solar(中)
  10. 逻辑真题- 19/20年逻辑真题名师讲评 主讲人:王诚
  11. App Extension应用扩展
  12. 一作发表8篇SCI,这位双一流高校博士生是怎么做到的?
  13. EasyExcel简单使用学习
  14. 植物大全和植物识别系统毕业设计,植物大全和AI识别系统设计与实现,植物识别系统系统论文毕设作品参考
  15. LVS负载均衡群集—NAT模式实例
  16. 【BZOJ2565】最长双回文串 Manacher
  17. 各保险公司所使用的业务系统
  18. Unity 生成 Excel表格
  19. linux飞秋查看共享文件,Ubuntu下的iptux和Windows下的飞秋互传文件
  20. Android工程中imei和oaid的获取

热门文章

  1. 用友UAP/NC,今天做表体的编辑后事件
  2. flask之搭建web服务
  3. 基于Python实现五大常用分类算法(原理+代码)
  4. “国云”搅动云计算江湖,产业潮水将向何处涌动?
  5. HTML5 respond.js
  6. HTTP之Body格式
  7. 保险o2o微服务架构设计
  8. P3052 [USACO12MAR]摩天大楼里的奶牛
  9. html中增删改查怎么写,增删改查crud
  10. 奥威BI—数字化转型首选,以数据驱动企业发展