ggplot2|theme主题设置,详解绘图优化-“精雕细琢”

简介: ggplot2|theme主题设置,详解绘图优化-“精雕细琢”

本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/hMjPj18R1cKBt78w8UfhIw

学习了ggplot2的基本绘图元素ggplot2|详解八大基本绘图要素,可以初步绘制出需要展示的图形,legend可以对图例进行细节的修改ggplot2 |legend参数设置,图形精雕细琢,那theme有什么用呢?

theme是解决图是否美观的一个工具,其与scale最大的区别在于不受数据左右先把scale做好,就是一张合格的图;再处理theme,则是一张出色的图

载入数据,R包

library(ggplot2)
#载入数据
data(diamonds)
set.seed(1234)
diamond <- diamonds[sample(nrow(diamonds), 2000), ]
# 绘制初始图形
p <- ggplot(data = diamond) +geom_point(aes(x=carat, y=price, colour=color,shape=cut)) + labs(title="学习ggplot2可视化",subtitle = "参数好多学不会?",caption = "熟能生巧")
p

可以看到上图的标题,轴标签和图例已经默认设置好了,是否可以个性化修改呢?当然可以!!!

R控制台输入?theme即可以看到theme函数的大量参数,可以实现更改图形外观的大多数要求,有四种主要类型:

  1. element_text():使用element_text()函数设置基于文本的组件,如title,subtitle 和caption等。
  2. element_line():使用element_line()设置基于线的组件,如轴线,主网格线和次网格线等。
  3. element_rect():使用element_rect()修改基于矩形的组件,如绘图区域和面板区域的背景。
  4. element_blank():使用element_blank()关闭显示的主题内容。

精雕细琢


1 修改标题,坐标轴

由于绘图和轴标题是文本组件,使用element_text()参数修改。

p + theme(plot.title=element_text(size=20,
                                   face="bold",
                                   color="skyblue", #颜色
                                   hjust=0.5, #调整位置,正中间
                                   lineheight=1.2))

设置title的尺寸,颜色,线高,位置


/

设置subtitle和caption

p+theme(plot.subtitle=element_text(size=15,

                                     face="bold",

                                     color="red",

                                     hjust=0.5),  # subtitle

          plot.caption=element_text(size=15))  # caption

修改坐标轴

p + theme(axis.title.x=element_text(vjust=1,  
                                     size=20),  # X axis title
           axis.title.y=element_text(size=10,
                                    color = "blue"),  # Y axis title
           axis.text.x=element_text(size=10,
                                    angle = 45,
                                    color = "red",
                                    vjust=.5),  # X axis text
           axis.text.y=element_text(size=10))  # Y axis text

以上示例涵盖了一些常用的主题修改,其中

  • vjust,控制标题(或标签)和绘图之间的垂直间距。
  • hjust,控制水平间距。将其设置为0.5将标题居中。
  • face,设置字体(“plain”,“italic”,“bold”,“bold.italic”)


2 修改图例

设置图例标题,文本和键的样式

图例的关键是像元素一样的图形,因此使用element_rect()函数进行设置。

p+theme(legend.title=element_text(size=15, color="firebrick"),

         legend.text=element_text(size=10),

         legend.key=element_rect(fill='green'))

image.png

删除图例和更改图例位置

图例是主题的一个方面,因此可以使用theme()功能进行修改。其中legend.justification参数可以将图例设置在图中,legend.position参数用来将图例设置在图表区域,其中x和y轴的位置(0,0)是在图表的左下和(1,1)是右上角。

# No legend --------------------------------------------------
p + theme(legend.position="None") + labs(subtitle="No Legend")
# legend at the bottom and horizontal ------------------------
p + theme(legend.position="bottom", legend.box = "horizontal") + labs(subtitle="Legend bottom")
# legend at bottom-right, inside the plot --------------------
p + theme(legend.title = element_text(size=12, color = "salmon", face="bold"),
          legend.justification=c(1,0),
          legend.position=c(0.95, 0.05),  
          legend.background = element_blank(),
          legend.key = element_blank()) +
 labs(subtitle="Legend: Bottom-Right Inside the Plot")

image.png

3 修改绘图背景,主轴和次轴

更改绘图背景

# 更改绘图背景和绘图区域
p + theme(panel.background = element_rect(fill = 'grey80'),
  plot.background=element_rect(fill="khaki"),
         plot.margin = unit(c(3, 2, 1, 1), "cm")) +  #设置绘图区域距离边的据类,上,右,下,左
   labs(title="Modified Background", subtitle="Change Plot Margin")

更改主次网格线以及X,Y坐标轴

# Change Plot Background elements -----------------------------------
p + theme(
         panel.grid.major = element_line(colour = "burlywood", size=1.5),
         panel.grid.minor = element_line(colour = "tomato",
                                         size=0.25,
                                         linetype = "dashed"),
         panel.border = element_blank(),
         axis.line.x = element_line(colour = "darkorange",
                                    size=1.5,
                                    lineend = "butt"),
         axis.line.y = element_line(colour = "skyblue",
                                    size=1.5)) +
   labs(
        subtitle="Change Major and Minor grid, Axis Lines")

删除主,次网格线,边框,轴标题,文本和刻度

p + theme(panel.grid.major = element_blank(), #主网格线
          panel.grid.minor = element_blank(), #次网格线
          panel.border = element_blank(), #边框
          axis.title = element_blank(),  #轴标题
          axis.text = element_blank(), # 文本
          axis.ticks = element_blank()) +
  labs(title="Modified Background", subtitle="Remove major and minor axis grid, border, axis title, text and ticks")

4 默认主题以及自定义主题

ggplot2 自带主题

 

theme_grey()为默认主题,theme_bw()为白色背景主题,theme_classic()为经典主题。
p + theme_bw() +
    labs(subtitle="Change theme_bw")

ggplot2 扩展包主题

library(ggthemes)
p + theme_economist() +
    labs(subtitle="Change theme_economist")
#其他可选
#theme_economist theme_economist_white theme_wsj    theme_excel theme_few  
#theme_foundation theme_igray  theme_solarized theme_stata  theme_tufte

自定义主题

可根据常见需要自定义常用主题

p + theme_MJ() + labs(subtitle = "Change theme_MJ")



学习ggplot2的八大基本元素,了解legend的基本设置后,现在也清楚了主题的相关设置,就可以画出一张出色的图了😄



相关文章
|
12月前
|
前端开发 JavaScript 搜索推荐
Marp 入门与教程:让你一分钟爱上代码写PPT的乐趣
Marp 是一个基于 Markdown 的开源幻灯片制作工具,可将 Markdown 文档轻松转换为精美幻灯片。支持 VS Code 插件实时预览、命令行工具批量处理、自定义主题等,适用于技术分享、工作汇报和教学等多种场景。相比 LaTeX Beamer,Marp 学习成本低,跨平台支持好,设计现代美观。
|
存储 前端开发 Java
农产品销售|助农惠农|基于Springboot实现农产品销售管理系统
农产品销售|助农惠农|基于Springboot实现农产品销售管理系统
830 1
|
11月前
|
API 数据处理 开发者
获取淘宝分类详情:深入解析taobao.cat_get API接口
淘宝开放平台推出的`taobao.cat_get` API接口,帮助开发者和商家获取淘宝、天猫的商品分类详情。该接口支持获取类目列表、属性及父类目信息,通过指定分类ID(cid)实现精准查询,并提供灵活的参数设置和高效的数据处理。使用流程包括注册账号、创建应用、获取App Key/Secret、构造请求、发送并解析响应。示例代码展示了如何用Python调用此API。开发者可借此为电商项目提供数据支持。
|
6月前
|
自然语言处理 Rust Java
通义灵码编程智能体深度评测(Qwen3模型+终端操作+MCP工具调用实战)
通义灵码作为阿里云推出的智能编程解决方案,凭借Qwen3模型与MCP平台的协同,在代码生成、终端操作与工具链调用方面展现强大能力。本文从真实开发场景出发,评测其在多语言代码理解、自动化工作流及复杂工程任务中的表现,结合性能与成本数据,揭示其在提升开发效率与系统集成方面的工程价值。
603 1
|
设计模式 存储 缓存
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(二)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
346 0
|
分布式计算 负载均衡 监控
p2p网络架构模型
P2P(Peer-to-Peer)模式是一种网络架构模型,在这种模型中,每个节点(peer)既是服务的提供者也是服务的消费者。这意味着每个参与的节点都可以直接与其他节点通信,并且可以相互提供资源和服务,例如文件共享、流媒体传输等。
547 6
|
存储 持续交付 API
GitLab CI/CD简介:构建持续集成与持续交付的全方位指南
GitLab CI/CD简介:构建持续集成与持续交付的全方位指南
699 0
GitLab CI/CD简介:构建持续集成与持续交付的全方位指南
|
Rust 安全 物联网
解锁物联网安全新纪元!Rust如何悄然革新系统级编程,让智能设备“零风险”连接未来?
【8月更文挑战第31天】随着物联网(IoT)技术的发展,设备安全与效率成为关键挑战。Rust语言凭借其内存安全、高性能和并发优势,逐渐成为物联网开发的新宠。本文通过智能门锁案例,展示Rust如何确保生物识别数据的安全传输,并高效处理多用户请求。Rust的应用不仅限于智能家居,还广泛用于工业自动化和智慧城市等领域,为物联网开发带来革命性变化。
408 1
|
Oracle 安全 关系型数据库
|
数据采集 数据可视化
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)
利用R语言进行因子分析实战(数据+代码+可视化+详细分析)