本文为个人学习整理,仅供参考。如有侵权,请联系删除。
在使用 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(0, 50, length.out = 200)
y1 <- seq(1, 10, length.out = 200) + rnorm(200, mean = 0, sd = 0.5)
y2 <- seq(1, 20, 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(8, 28, 48), linetype = "dashed", color = "darkgrey") +
scale_y_continuous(expand = c(0, 0), limits = c(0, 10)) +
scale_x_continuous(expand = c(0, 0)) +
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.8, 25, 42), linetype = "dashed", color = "darkgrey") +
scale_y_continuous(expand = c(0, 0), limits = c(0, 25)) +
scale_x_continuous(expand = c(0, 0), limits = c(0, 50)) +
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(0, 50, length.out = 200)
y1 <- seq(1, 10, length.out = 200) + rnorm(200, mean = 0, sd = 0.5)
y2 <- seq(1, 20, 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(0, 0), limits = y_limit) +
scale_x_continuous(expand = c(0, 0)) +
labs(title = title, x = "Sample Position (mm)", y = "Observed Value") +
public_themes
}
# 使用函数绘制图形
p1 <- create_plot(df1, "X Profile: Trend Analysis", c(0, 10), c(8, 28, 48))
p2 <- create_plot(df2, "Y Profile: Trend Analysis", c(0, 25), c(9.8, 25, 42))
# 合并图形
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
免责声明:本文为个人学习笔记,整理过程难免有误。如有错误,欢迎指正。仅供个人学习使用,如有侵权,请联系删除