前言
一、数据集
数据下载链接见文章顶部
数据:
library(readxl)
data <- read_excel("fig2_violin.xlsx", sheet = "Sheet1")
二、ggplot2画图
1、全部代码
library(ggplot2)
pic =
ggplot(data, aes(x = Species, y = Production, fill = Species, color = Species)) +
geom_boxplot(width = 0.8, alpha = 0.5, lwd = 1) +
# 主题设置
theme_classic() +
theme(plot.margin = margin(0.1, 0.1, 0.1, 1.3, "cm")) +
# 轴设置
xlab("") +
coord_cartesian(ylim = c(0,2500)) +
theme(axis.text = element_text(size = 18)) +
theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
theme(axis.title = element_text(size = 20)) +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0, unit = "pt"))) +
# 图例设置
theme(legend.position = "none") +
# 颜色
scale_fill_manual(values=c('#fc8452', '#91cc75', '#ee6666', '#fac858', '#3ba272', '#73c0de', '#ea7ccc')) +
scale_color_manual(values=c('#fc8452', '#91cc75', '#ee6666', '#fac858', '#3ba272', '#73c0de', '#ea7ccc'))
jpeg(filename = "test2.png", width = 4300, height = 3000, res = 600, quality = 100)
pic
dev.off()
2、细节拆分
1)导包
library(ggplot2)
2)创建图形对象
pic =
ggplot(data, aes(x = Species, y = Production, fill = Species, color = Species)) +
geom_boxplot(width = 0.8, alpha = 0.5, lwd = 1)
- 设置 x 轴为物种,y 轴为产量,按物种类型对边框(color)和内部(fill)着色。
- geom_boxplot 指定画箱线图。
width = 0.8:设置每一个箱状矩形的宽度。值为0.8表示相对于默认宽度的80%。
alpha = 0.5:设置填充颜色透明度。值为0.5表示50%的透明度,即半透明效果。
lwd = 1:设置箱状矩形边框的线宽。值为1表示线的宽度为1个单位(毫米)。
3)主题设置
theme_classic() +
theme(plot.margin = margin(0.1, 0.1, 0.1, 1.3, "cm"))
- theme_classic 指定经典主题。
- 设置绘图区域的边距。margin 函数中的参数分别表示上、右、下、左四个方向的边距大小,单位为厘米(“cm”)。在这个例子中,上边距、右边距、下边距都是0.1厘米,左边距是1.3厘米。因为x轴刻度的文字比较长,如果不加宽左边距会有一部分被截断。
4)轴设置
xlab("") +
coord_cartesian(ylim = c(0,2500)) +
theme(axis.text = element_text(size = 18)) +
theme(axis.text.x = element_text(angle = 30, hjust = 1)) +
theme(axis.title = element_text(size = 20)) +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 10, b = 0, l = 0, unit = "pt")))
- xlab 设置 x 轴标题为空。
- coord_cartesian(ylim = c(0,2500)) 用于限制y轴坐标轴的范围,只显示从0到2500的区间。这意味着即使数据中存在超出这个范围的值,图形也只会显示在这个范围内。该函数与ylim(0, 2500)的区别是:ylim 函数会过滤掉超出范围的数据点。当使用这个函数绘制箱线图时,会仅用 y∈[0,2500] 的点绘制。而 coord_cartesian 函数会用所有的点绘制,但只展示 y∈[0,2500] 区间的图像。
- 设置轴刻度字号18,其中对于 x 轴:
angle = 30:设置刻度文本的旋转角度为30度,当文本较长时便于在图上显示。
hjust = 1:设置 x 轴文本的水平对齐方式。值为1表示右对齐,即文本的右侧与轴线对齐。 - 设置轴标题字号20,其中对于 y 轴:
margin 函数指定了 y 轴标题上、右、下、左四个方向的外边距大小,单位为 “pt”(points)。在这个例子中,上边距为0,右边距为10,下边距为0,左边距为0。防止 y 轴标题与刻度贴的太紧影响美观。
5)图例设置
theme(legend.position = "none")
- 将图例位置设为 “none”,即不显示图例。
除此之外,还可以通过 guides 函数实现相同效果:去掉边框颜色和填充颜色的图例。
guides(color = "none", fill = "none")
6)散点颜色
scale_fill_manual(values=c('#fc8452', '#91cc75', '#ee6666', '#fac858', '#3ba272', '#73c0de', '#ea7ccc')) +
scale_color_manual(values=c('#fc8452', '#91cc75', '#ee6666', '#fac858', '#3ba272', '#73c0de', '#ea7ccc'))
- 分别为每个物种类别设置填充颜色和边框颜色。
7)保存图片
jpeg(filename = "test2.png", width = 4300, height = 3000, res = 600, quality = 100)
pic
dev.off()
- jpeg 函数打开了一个JPEG设备,设定了图片的保存路径为 “test2.png”,图片的宽度为4300像素,高度为3000像素,分辨率为600 dpi,图片质量为100%。
- pic 是之前生成的图形对象。
- dev.off() 关闭了之前打开的图形设备,保存了图片到指定路径。这是在完成图片保存后必须执行的步骤,以确保保存的图片被正确地输出。