【R语言学习笔记】| 绘图优化:封装函数以提升效率与代码可读性

文摘   科技   2024-11-01 12:24   甘肃  

本文为个人学习整理,仅供参考。如有侵权,请联系删除。

在使用 R语言 进行数据可视化时,我们常常需要绘制多个相似的图形。这种重复性工作不仅繁琐,还容易导致错误。如何提高工作效率,简化这一过程,成为许多科研人员面临的挑战。

将重复的绘图代码封装成函数,是一种有效的解决方案。 通过这种方法,我们不仅可以减少代码冗余,还能提高代码的可维护性和可读性。在本文中,我们将简单介绍将重复绘图代码转化为函数的必要性与示例,让数据可视化变得更加高效与便捷。

本文主要内容

  • 代码冗余问题

  • 封装绘图函数

  • 🎉文末惊喜

    • 图书信息

    • 活动规则

代码冗余问题

在数据可视化的过程中,常常会遇到大量相似的代码,这不仅使代码冗长,还增加了维护的难度。以下示例演示了这一问题:

以下代码仅供演示使用,无实际意义

rm(list=ls())

library(ggplot2)
library(readxl)
library(patchwork)

# 设置公共主题
public_themes <- theme_classic() +
  theme(
    axis.title = element_text(size = 15, face = "bold", color = "black"),
    axis.text = element_text(size = 12, face = "bold", color = "black"),
    axis.ticks.length = unit(.2"cm"),
    axis.ticks = element_line(size = 1),
    axis.line = element_line(size = 1),
    legend.title = element_text(size = 13),
    legend.text = element_text(size = 13),
    plot.title = element_text(size = 18, face = "bold", color = "black"),
    panel.grid.major = element_line(color = "grey80", size = 0.5),
    panel.grid.minor = element_blank()
  )

set.seed(123)

# 生成数据
x <- seq(050, length.out = 200)
y1 <- seq(110, length.out = 200) + rnorm(200, mean = 0, sd = 0.5)
y2 <- seq(120, length.out = 200) + 0.05 * (x - 25)^2 + rnorm(200, mean = 0, sd = 1)
df1 <- data.frame(x = x, y = y1)
df2 <- data.frame(x = x, y = y2)

# 绘制第一个图形
p1 <- ggplot(df1, aes(x = x, y = y)) + 
  geom_line(color = "#1f78b4", size = 1.2) + 
  geom_point(color = "#1f78b4", size = 1.5) + 
  geom_vline(xintercept = c(82848), linetype = "dashed", color = "darkgrey") +
  scale_y_continuous(expand = c(00), limits = c(010)) +
  scale_x_continuous(expand = c(00)) +
  labs(title = "X Profile: Trend Analysis", x = "Sample Position (mm)", y = "Observed Value") +  # 更新坐标标题
  public_themes

# 绘制第二个图形
p2 <- ggplot(df2, aes(x = x, y = y)) + 
  geom_line(color = "#1f78b4", size = 1.2) + 
  geom_point(color = "#1f78b4", size = 1.5) + 
  geom_vline(xintercept = c(9.82542), linetype = "dashed", color = "darkgrey") +
  scale_y_continuous(expand = c(00), limits = c(025)) +
  scale_x_continuous(expand = c(00), limits = c(050)) +
  labs(title = "Y Profile: Trend Analysis", x = "Sample Position (mm)", y = "Measured Value") +  # 更新坐标标题
  public_themes

# 合并图形
p1 / p2

封装绘图函数

为了解决代码冗余的问题,我们可以将重复的绘图逻辑封装成一个函数。这样,未来如果需要修改图形的某些属性,只需在函数中进行更改,而不必逐个查找和更新所有绘图代码。

以下是封装后的绘图函数示例:

rm(list=ls())

library(ggplot2)
library(readxl)
library(patchwork)

# 设置公共主题
public_themes <- theme_classic() +
  theme(
    axis.title = element_text(size = 15, face = "bold", color = "black"),
    axis.text = element_text(size = 12, face = "bold", color = "black"),
    axis.ticks.length = unit(.2"cm"),
    axis.ticks = element_line(size = 1),
    axis.line = element_line(size = 1),
    legend.title = element_text(size = 13),
    legend.text = element_text(size = 13),
    plot.title = element_text(size = 18, face = "bold", color = "black"),
    panel.grid.major = element_line(color = "grey80", size = 0.5),
    panel.grid.minor = element_blank()
  )

set.seed(123)

# 生成数据
x <- seq(050, length.out = 200)
y1 <- seq(110, length.out = 200) + rnorm(200, mean = 0, sd = 0.5)
y2 <- seq(120, length.out = 200) + 0.05 * (x - 25)^2 + rnorm(200, mean = 0, sd = 1)
df1 <- data.frame(x = x, y = y1)
df2 <- data.frame(x = x, y = y2)

# 绘制图形的函数
create_plot <- function(data, title, y_limit, vlines) {
  ggplot(data, aes(x = x, y = y)) + 
    geom_line(color = "#1f78b4", size = 1.2) + 
    geom_point(color = "#1f78b4", size = 1.5) + 
    geom_vline(xintercept = vlines, linetype = "dashed", color = "darkgrey") +
    scale_y_continuous(expand = c(00), limits = y_limit) +
    scale_x_continuous(expand = c(00)) +
    labs(title = title, x = "Sample Position (mm)", y = "Observed Value") +
    public_themes
}

# 使用函数绘制图形
p1 <- create_plot(df1, "X Profile: Trend Analysis", c(010), c(82848))
p2 <- create_plot(df2, "Y Profile: Trend Analysis", c(025), c(9.82542))

# 合并图形
p1 / p2

🎉文末惊喜

为感谢大家的支持与关注,我们将在本文举办一次图书赠送活动,旨在提升读者的编程与科研绘图能力。在下方留言区分享你的学习心得或提问,我们将在活动结束后根据规则选取幸运读者赠送《ggplot2科技绘图:基于R语言的数据可视化》一书。期待您的参与,共同探索数据可视化的魅力!


图书信息

  • 《ggplot2科技绘图:基于R语言的数据可视化》是一本全面而深入的ggplot2指南,旨在帮助读者掌握使用R语言中的ggplot2包进行数据展示的技巧。不仅详细介绍了ggplot2的基本概念和操作方法,还通过丰富的实例演示了如何创建各种引人入胜的科技图表。

  • 全书涵盖了从基础到高级的多个方面,如创建基本图表、统计图表、添加几何元素、统计变换绘图、标度设置以及拓展包的使用等。每章都配备了丰富的绘图示例和步骤演练指导,使读者能够在实操中巩固所学知识。此外,还提供了全程视频教学、源代码、数据集和技术支持等配书资源,确保学习过程的便捷高效。

活动规则

  • 🎁 在本文留言区分享你的学习心得或提问,参与书籍赠送活动!首次截止时间为2024年11月7日晚20:00。我们将从点赞排名最高的前两位读者中赠送《ggplot2科技绘图:基于R语言的数据可视化》一书。

  • 🎁 随着阅读量增加,我们还会增加赠书名额,并随机抽取其他读者进行赠送。期待你的参与,共同探索数据可视化的魅力!

Tips:本次活动所有解释权归本公众号所有,感谢您的理解与支持。


主要参考:

[1.]  https://item.jd.com/14835066.html

免责声明:本文为个人学习笔记,整理过程难免有误。如有错误,欢迎指正。仅供个人学习使用,如有侵权,请联系删除

可凡的学习笔记本
在读硕士生,R、Python爱好者
 最新文章