ggplot2 美化 背景/主题(theme)

ggplot2 美化 背景/主题(theme)

英文中使用theme一词,但感觉翻译为背景、主题均可,自己习惯称为背景,下文中尽可能统一为
“主题”一词。
基本概念
ggplot2的theme()函数可以实现对非数据元素的调整;绘图时,首先确定数据如何展示,之后再
通过theme()对结果进行渲染,使之更加美观。
标度
通过labs{ggplot2}等函数进行修改,此处不做展开。
内置主题
本身有8种内置的主题(theme);通过 theme_主题名() 进行调用,下方是对各类主题的介绍[1]:

  1. theme_grey() 默认背景,浅灰色背景和白色网格线,无边框;
  2. theme_bw() 类似默认背景,调整为白色背景和浅灰色网格线,无边框;
  3. theme_linedraw() 白色背景和黑色网格线,黑色边框线;
  4. theme_light() 白色背景和浅灰色网格线,浅灰色边框;
  5. theme_dark() 灰黑色背景和灰色网格线,灰色/无边框;
  6. theme_minimal() 白色背景和浅灰色网格线,无边框;
  7. theme_classic() 类似R本身绘图的风格;
  8. theme_void() 完全空白
    主题名背景色网格线边框刻度线坐标轴说明
    grey 浅灰白色白色黑色无

    认,ggplo
    t2标志性
    主题
    bw 白色浅灰黑色黑色无
    适合投影
    仪展示
    linedraw 白色
    黑色
    (细)
    黑色
    (粗)
    黑色无
    只有白色
    背景和不
    同粗细的
    黑色线
    条;因为
    有非常细
    的线条
    (<<1pt
    )可能会
    被一些期
    刊拒绝
    light 白色浅灰浅灰浅灰无
    线条全为
    浅灰色
    dark 灰色深灰深灰黑色无
    采用鲜艳
    的配色为
    数据上色
    时推荐,
    有突出效

    minimal 白色浅灰无浅灰无
    符合
    ggplot2审
    美的极简
    主题
    classic 白色无无黑色黑色
    类似R本身
    绘图的风

    void 白色/无无无无无啥都没有
    具体的图像可以参考这个网页18 Themes | ggplot2 (ggplot2-book.org)。但是其中的图像较
    小,可以复制代码后自己运行。
    其他主题包
    由Jeffrey Arnold 开发的ggthemes包,提供更多的主题选择,当然在期刊投稿的时候可能不是很
    推荐。
    比如其中有常见的solarized主题(一种暖色调的护眼主题,常见于各类IDE中,Rstudio也推荐此
    类主题,虽然自己本身比较讨厌黄色)和放excel的主题。
    自制/修改主题
    可以将theme()部分保存为变量,以重复调用;
    SelfTheme <‐ theme(…)
    ggplot变量 + SelfTheme
    此外,有一系列的theme_改动()的函数,但是使用起来与help文档中的介绍无法对应;具体如
    下:
    theme_set(主题名/自己折腾的主题变量) 相当于设置默认使用的主题;
    theme_update() 或 theme_replace() 分别对应覆写或替代,将后面的参数覆写或替代原主题的相
    关信息,具体区别见帮助文档;
    theme_get() 没搞明白,疯了,什么东西这是
    help文档中对应介绍:Use theme_get() to get the current theme……
    微调
    这一部分对应下面代码中“element_功能()”部分,前面的组间见下一部分"组件"
    在选定主题的基础上,可以通过theme函数以“覆盖”[2]某些组件的方式进行调整。具体的格式
    为:
    这里需要修改的部分用中文代替,其他为英文(英文字符,所以复制后只需要替换掉中文部分即可)
    ggplot变量 + theme(组件 = element_功能())
    组件对应替换为类似 plot.title 的格式|具体见“微调”后面对应的“组件”部分。
    功能见下文。
    原文为
    plot + theme(element.name = element_function()) # 但是element.name部分是如plot.tltle的格式
    功能有4个基本类型,包括文字(text),线条(line),矩形(rectangle),空白(blank)。
    各有一系列控制外观的参数:
    text
    element_text() 对应标签和标题;其中参数包括:
    • family = “字体名”| 字体
    • colour = “颜色单词”| 颜色
    • size = 数值 | 大小,单位是磅(point)
    • hjust = 数值 | 好像有范围,1对应右侧靠边
    • vjust = 数值 | 同上
    • angle = 数值 | 单位是度,采用角度制,不要用弧度制(国内应该不至于)
    • lineheight = 待定 | 行高,与fontcase的比例,这个在word中就没搞明白,欢迎补充
    “Setting the font face is particularly challenging.”——from 该章节作者
    • mergin = mergin(t=数值, r=数值, b=数值, l=数值) | 控制字体周围边距,默认值为0,四个字
    母分别对应top、right、bottom和left。
    具体代码为
    ggplot变量 + theme(plot.title = element.text(……)) # 修改图表名
    ggplot变量 + theme(axis.title.x = element.text(……)) # 修改图表名
    line
    element_line()绘制线条,参数有:
    • colour = “颜色单词”| 颜色
    • size = 数值 | 大小
    • linetype = “单词” | 线条类型,具体参看help文档
    具体代码为:
    ggplot变量 + theme(panel.grid.major = element.line(……)) # 修改网格线
    rect
    element_rect()绘制背景矩形(图像整体外围的部分),具体参数有:
    • fill = “颜色单词”| 图像外围的颜色
    • colour = “颜色单词”| 整体边框的颜色
    • size = 数值 | 边框的粗细
    • linetype = “单词” | 线条类型,具体参看help文档
    ggplot变量 + theme(plot.background = element.rect(……)) # 修改背景矩形
    blank
    element_blank() 不绘制任何东西,并取消相应组间的空间。
    unit
    用于设定网格单位,如unit(1,“cm”)或unit(0.25,“in”)
    组件
    此部分对应下面代码的组件部分。
    ggplot变量 + theme(组件 = element_功能())
    图像组件
    组件对应的element_功能() 描述
    plot.background element_rect() 图像背景
    plot.title element_text() 图像标题
    plot.margin margin() 图像边距
    plot.background=element_rect(fill = NA)可以将背景矩形设为透明。
    如果要绘制边框,应该至少保留一个微小的边距。
    坐标轴组件
    轴线处理,默认是隐藏的。
    组件对应的element_功能() 描述
    axis.line element_line() 轴线
    坐标轴标签
    有下方三种形式,如果一次性修改两个坐标轴,应选择第一种形式;所有没有在.x和.y设置的属
    性,都会从axis.text中继承。
    对于长标签,可以设置element_text(angle=-90, vjust=0.5)来避免标签间的重叠;或者其他的负
    数角度值和hjust=0,vjust=1的组合。
    组件对应的element_功能() 描述
    axis.text element_text() 坐标轴标签
    axis.text.x element_text() x轴标签
    axis.text.y element_text() y轴标签
    坐标轴标题
    有下方三种形式,如果一次性修改两个坐标轴,应选择第一种形式;所有没有在.x和.y设置的属
    性,都会从axis.title中继承。
    组件对应的element_功能() 描述
    axis.title element_text() 坐标轴标题
    axis.title.x element_text() x轴标题
    axis.title.y element_text() y轴标题
    轴须组件
    组件对应的element_功能() 描述
    axis.ticks element.line() 轴须标签
    axis.ticks.length unit() 轴须标签的长度
    图例组件
    首先其他诸如guide_legend()或guide_colourbar()等函数也可以用来修改图例。以及向
    legend.position\legend.direction\legend.justification\legend.box等属性控制图例在图像中的
    布局。
    组件对应的element_功能() 描述
    legend.background element_rect() 图例背景
    发布于 2022-01-30 16:06
    legend.key element_rect() 图例符号背景
    legend.key.size unit() 图例符号大小
    legend.key.height unit() 图例符号高度
    legend.key.width unit() 图例符号宽度
    legend.margin unit() 图例边距
    legend.text element_text() 图例标签
    legend.text.align 0-1 图例标签对齐(0=右,1=左)
    legend.title element_text() 图例名
    legend.title.align 0-1 图例名对齐(0=右,1=左)
    面板组件
    对应控制图像的外观
    组件对应的element_功能() 描述
    panel.background element_rect() 面板背景(数据下面)
    panel.border element_rect() 面板边界(数据上面)
    panel.grid.major element_line() 主网格线
    panel.grid.major.x element_line() 竖直主网格线
    panel.grid.major.y element_line() 水平主网格线
    panel.grid.minor element_line() 次网格线
    panel.grid.minor.x element_line() 竖直次网格线
    panel.grid.minor.y element_line() 水平次网格线
    aspect.ratio 数值(m/n,两个整数) 图像宽高比
    panel.background与panel.border不同主要为前者绘制在数据的下面一层;后者绘制在数据上面
    一层;因此覆盖panel.border时需要设定fill=NA。
    分面组件
    绘制多个图像时使用,没用过,简单整理。
    组件对应的element_功能() 描述
    strip.background element_rect() 分面标签背景
    strip.text element_text() 条状文本
    strip.text.x element_text() 水平条状文本
    strip.text.y element_text() 竖直条状文本
    panel.spacing unit() 分面间边距
    panel.spacing.x unit() 竖直分面间边距
    panel.spacing.y unit() 水平分面间边距
    参考
  9. ^ https://ggplot2.tidyverse.org/reference/ggtheme.html
  10. ^ 后面的代码会修改前面已有的设置
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fb19801101

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值