ggplot2绘图入门


一、基础概念和语法

1、ggplot2 概述

ggplot2 的核心理念:图层语法

ggplot2 是 R 语言中的一个强大数据可视化包,基于“图层语法”(Grammar of Graphics)。图层语法将图表分解为多个可组合的元素(如数据、几何对象、统计变换等),用户可以通过叠加这些元素创建复杂且美观的图表。

2、基本语法

ggplot() 函数

ggplot() 是创建 ggplot2 图表的起点,用于创建一个新的ggplot图形对象。通常需要传入数据框和基本的美学映射(aesthetic mappings)。

示例:

ggplot(data = my_data)

aes() 函数 (aesthetic mappings)

在这里插入图片描述

aes() 函数的作用是指定数据集中的哪些变量将被映射到图形的哪些属性(如x轴、y轴、颜色、大小、形状)上,通常在 ggplot() 或几何对象(如 geom_point())中使用。

示例:

ggplot(data = my_data, aes(x = var1, y = var2))

图层概念:+ 操作符

在 ggplot2 中,图表通过图层构建,使用 + 操作符将不同的图层(如几何对象、统计变换、坐标系统等)叠加在一起,逐步构建出完整的图表。

示例:

ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  geom_smooth(method = "lm")

二、几何对象 (geometric objects)

常见几何对象:

geom_smooth() # 用于添加一条平滑的曲线,以展示数据的趋势或模式。
geom_point() # 用于在图上绘制散点。
geom_boxplot() # 用于创建箱线图,展示数据的分布情况,包括中位数、四分位数和异常值。
geom_line() # 用于在图上绘制线条,通常用于展示随时间或顺序变化的数据趋势。
geom_bar() # 用于创建条形图,显示分类数据的频数或比例。
geom_histogram() # 用于创建直方图,显示数据分布。
geom_density() # 用于绘制密度图,展示数据的密度估计。
geom_area() # 用于创建面积图,区域图可以用来展示随时间变化的数值变量。
geom_violin() # 用于创建小提琴图,展示数据分布并比较不同组。
geom_errorbar() # 用于添加误差条,展示数据的不确定性。
geom_text() # 用于在图上添加文本标签。
geom_abline() # 用于添加最佳拟合线或直线。
geom_hline()geom_vline() # 分别用于添加水平线和垂直线。

函数名前缀geom的全称是几何对象geometric objects。几何对象函数决定了数据在图形中的具体呈现方式,如点、线、条形等。它们还可以组合使用,以创建复杂的图形。


三、数据映射 (Mapping)

1、映射概述

x 轴和 y 轴映射

在 ggplot2 中,使用 aes() 函数将数据变量映射到图表的 x 轴和 y 轴。这种映射定义了数据如何在图表中呈现,并帮助观察者理解数据的关系和趋势。

示例:

# 将变量 var1 映射到 x 轴,将变量 var2 映射到 y 轴
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point()

色彩、大小、形状映射

除了 x 轴和 y 轴,ggplot2 还支持将其他数据变量映射到图表中的色彩、点的大小和形状等美学属性。通过这种方式,可以同时展示多维数据,丰富图表的信息量。

示例:

# 将变量 var3 映射到点的颜色,将变量 var4 映射到点的大小
ggplot(data = my_data, aes(x = var1, y = var2, color = var3, size = var4)) +
  geom_point()

2、因子变量和数值变量

分类变量映射

当数据变量是分类变量(也称为因子变量)时,可以将其映射到图表中的色彩、形状等属性,以区分不同类别之间的差异。这种映射能够使观察者更容易识别和理解数据的分布情况。

示例:

# 将因子变量 var_category 映射到颜色
ggplot(data = my_data, aes(x = var1, y = var2, color = var_category)) +
  geom_point()

连续变量映射

对于连续变量,可以将其映射到图表中的色彩、大小等属性,以展示其在不同取值范围内的变化情况。这种映射有助于观察者发现数据中的趋势和模式,并进行进一步的分析和解释。

示例:

# 将连续变量 var_continuous 映射到颜色
ggplot(data = my_data, aes(x = var1, y = var2, color = var_continuous)) +
  geom_point()

四、坐标系统 (Coordinate Systems)

1、常用坐标系

Cartesian 坐标系:coord_cartesian()

coord_cartesian() 用于设置图表的笛卡尔坐标系,即常见的直角坐标系。它可以限制绘图区域,但不会改变数据的显示方式。

示例:

# 在直方图中使用 coord_cartesian() 设置 y 轴的范围
ggplot(data = my_data, aes(x = var1)) +
  geom_histogram() +
  coord_cartesian(ylim = c(0, 100))

极坐标系:coord_polar()

coord_polar() 可以将图表转换为极坐标系,适用于展示周期性数据或环状数据。它将直角坐标系的角度空间转换为圆周空间。

示例:

# 在散点图中使用 coord_polar() 创建极坐标系
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  coord_polar()

翻转坐标系:coord_flip()

coord_flip() 可以将 x 轴和 y 轴交换,将图表从横向显示变为纵向显示,或者反之。

示例:

# 使用 coord_flip() 在直方图中翻转坐标系,使得横轴变为纵轴
ggplot(data = my_data, aes(x = var1)) +
  geom_histogram() +
  coord_flip()

2、缩放和裁剪

xlim() 和 ylim()

xlim() 和 ylim() 是一个基础R绘图函数,它会限制y轴范围并且过滤掉超出范围的数据点。当使用这个函数绘制箱线图时,会仅用 y∈[0,50] 的点绘制。

示例:

# 使用 xlim()ylim() 设置 x 轴和 y 轴的显示范围
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  xlim(0, 10) + # x轴范围,范围外点会删除
  ylim(0, 20)   # y轴范围,范围外点会删除

coord_cartesian()

coord_cartesian(ylim = c(0,50)) 是ggplot2包中的一个函数,它不会过滤数据点,只是调整显示的视图范围。这对于保留所有数据点,但只显示部分范围非常有用。当使用这个函数绘制箱线图时,会用所有的点绘制,但只展示 y∈[0,50] 区间的图像。

示例:

coord_cartesian(xlim = c(0,50)) # x轴范围,范围外点会保留
coord_cartesian(ylim = c(0,50)) # y轴范围,范围外点会保留

scale_x_continuous() 和 scale_y_continuous()

scale_x_continuous() 和 scale_y_continuous() 用于调整连续变量的坐标轴,可以设置坐标轴的显示范围、标签、刻度等属性。

示例:

# 使用 scale_x_continuous()scale_y_continuous() 设置坐标轴的显示范围和标签
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  scale_x_continuous(name = "X轴标签", limits = c(0, 10)) +
  scale_y_continuous(name = "Y轴标签", breaks = seq(0, 20, by = 5))

五、刻度和标签 (Scales and Labels)

1、刻度设置

连续型刻度:scale_x_continuous(), scale_y_continuous()

scale_x_continuous() 和 scale_y_continuous() 用于调整连续型变量的坐标轴刻度,可以设置刻度的范围、间隔、标签等属性。

示例:

# 使用 scale_x_continuous()scale_y_continuous() 设置连续型坐标轴的刻度
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  scale_x_continuous(name = "X轴标签", limits = c(0, 10), breaks = seq(0, 10, by = 2)) +
  scale_y_continuous(name = "Y轴标签", breaks = seq(0, 20, by = 5))

离散型刻度:scale_x_discrete(), scale_y_discrete()

scale_x_discrete() 和 scale_y_discrete() 用于调整离散型变量的坐标轴刻度,可以设置刻度的标签、顺序等属性。

示例:

# 使用 scale_x_discrete()scale_y_discrete() 设置离散型坐标轴的刻度
ggplot(data = my_data, aes(x = factor(var1), y = var2)) +
  geom_boxplot() +
  scale_x_discrete(name = "X轴标签", labels = c("A", "B", "C", "D"))

2、标签设置

1)labs()

语法:

labs(x = "New x axis label", y = "New y axis label",
	 title ="Add a title above the plot",
	 subtitle = "Add a subtitle below title",
	 caption = "Add a caption below plot",
	 alt = "Add alt text to the plot",
	 <aes> = "New <aes> legend title")

labs() 函数用于添加和修改图表的标签、标题、字幕、图例标题和其他描述性文本。以下是各个参数的解释和用法:

  • x:设置 x 轴的标签。例如,x = “New x axis label” 将 x 轴标签设置为 “New x axis label”。

  • y:设置 y 轴的标签。例如,y = “New y axis label” 将 y 轴标签设置为 “New y axis label”。

  • title:设置图表的主标题。例如,title = “Add a title above the plot” 将主标题设置为 “Add a title above the plot”。

  • subtitle:设置图表的副标题。例如,subtitle = “Add a subtitle below title” 将副标题设置为 “Add a subtitle below title”。

  • caption:设置图表的说明文字,通常显示在图表的底部。例如,caption = “Add a caption below plot” 将说明文字设置为 “Add a caption below plot”。

  • alt:设置图表的替代文本(alt text),用于描述图表的内容,这在网页可访问性中很重要。例如,alt = “Add alt text to the plot” 将替代文本设置为 “Add alt text to the plot”。

  • <aes>:用于设置特定美学映射(aesthetic mapping)的图例标题。例如,如果有一个颜色映射 color = Species,则可以使用 color = “Species Legend” 来设置颜色图例的标题为 “Species Legend”。

示例:

library(ggplot2)

# 示例数据
data(mpg)

# 创建基础图表
p <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) +
  geom_point()

# 添加和修改标签、标题等
p + labs(
  x = "Engine Displacement (L)",
  y = "Highway Miles per Gallon",
  title = "Fuel Efficiency of Various Car Models",
  subtitle = "Data from the ggplot2 package",
  caption = "Source: ggplot2 package",
  color = "Car Class"
)

在这里插入图片描述

2)xlab() 和 ylab()

labs() 可以设置 x 轴、y 轴、标题、副标题、图例标题以及其他描述性文本,参数更加灵活,可以设置各种不同的标签和标题。而 xlab() 和 ylab() 只能分别设置 x 轴和 y 轴的标签,参数只有一个,即标签的文本内容。

示例:

# 使用 xlab()ylab() 设置 x 轴和 y 轴的标签
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  xlab("X轴标签") +
  ylab("Y轴标签")

3)ggtitle()

ggtitle() 用于设置图表的标题。

示例:

# 使用 ggtitle() 设置图表的标题
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  ggtitle("图表标题")

4)guides()

guides() 函数是 ggplot2 中用于设置图表导引(guides)的函数之一。导引包括图例、坐标轴和其他标签,用于帮助解释图表中的数据和视觉元素。

基本用法

guides() 函数用于设置特定图形中的导引元素的属性。它的一般用法是:

guides(<aesthetic> = guide_xxx(...), <aesthetic> = guide_xxx(...), ...)

其中 <aesthetic> 表示要设置的导引元素,可以是图例(legend)、坐标轴(axis)、颜色(color)、大小(size)、形状(shape)等。guide_xxx(…) 是具体的导引类型和其参数设置,例如 guide_legend()、guide_axis() 、guide_colorbar()、guide_colourstrip()等。

设置图例 - guide_legend()

通过 guides() 函数可以设置图例的各种属性,例如标题、位置、方向、键值间距等。示例代码如下:

library(ggplot2)

# 创建基础图表
p <- ggplot(mpg, aes(x = displ, y = hwy, color = class)) +
  geom_point()

# 设置图例标题为 "Car Class"
p + guides(color = guide_legend(title = "Car Class"))
设置坐标轴 - guide_axis()

除了设置图例,guides() 函数还可以用于设置坐标轴的属性,例如标签、标尺、方向等。示例代码如下:

# 设置 x 轴标题为 "Engine Displacement"
p + guides(x = guide_axis(title = "Engine Displacement"))
删除导引 - guide_none()

如果您想要删除特定的导引元素,可以将其设置为 guide_none() 或 ‘none’ 。示例代码如下:

# 删除颜色图例
p + guides(color = guide_none())
p + guides(color = 'none')

六、主题和外观 (Themes and Appearance)

1、预设主题:theme_*()

ggplot2 提供了几种预设主题,如灰色、黑白、极简和经典等,可直接应用于图表。

theme_gray() # 默认主题
theme_bw() # 黑白主题
theme_linedraw() # 线条绘制主题
theme_light() # 轻量级主题
theme_dark() # 深色主题
theme_minimal() # 极简主题
theme_classic() # 经典主题
theme_void() # 空白主题

在这里插入图片描述

2、自定义主题:theme()

theme() 函数用于自定义图形的非数据元素,例如文本、坐标轴、背景和图例等。通过 theme 函数和其众多可选参数,可以针对图形的每一个部分进行样式调整。

示例:

# 自定义图表主题,修改背景颜色和边框
ggplot(data = my_data, aes(x = var1, y = var2)) +
  geom_point() +
  theme(panel.background = element_rect(fill = "lightblue"),
        panel.border = element_rect(color = "black", fill = NA))

- 按 theme 元素类型介绍

1)文本元素 (element_text)

 - axis.title: 坐标轴标题
       axis.title.x
       axis.title.y
 - axis.text: 坐标轴刻度标签
       axis.text.x
       axis.text.y
 - plot.title: 图形标题
 - plot.subtitle: 图形副标题
 - plot.caption: 图形脚注
 - legend.title: 图例标题
 - legend.text: 图例文本

可选参数

 - size: 文本大小
 - color: 文本颜色
 - face: 字体风格(如 "bold", "italic", "bold.italic", "plain"- angle: 文本旋转角度
 - hjust: 水平对齐(0 = 左对齐,1 = 右对齐)
 - vjust: 垂直对齐(0 = 下对齐,1 = 上对齐)

示例

theme(axis.title.x = element_text(size = 14, face = "bold", color = "blue"))

2)线元素 (element_line)

 - axis.line: 坐标轴线
       axis.line.x
       axis.line.y
 - panel.grid: 网格线
       panel.grid.major
       panel.grid.minor
       panel.grid.major.x
       panel.grid.major.y
       panel.grid.minor.x
       panel.grid.minor.y

可选参数

 - color: 线条颜色
 - size: 线条粗细
 - linetype: 线条类型

示例

theme(axis.line = element_line(color = "black", size = 1))

3)线元素 (element_rect)

可选参数

- fill: 矩形填充颜色
- color: 边框颜色
- linetype: 边框线型
- size: 边框大小

示例

theme(panel.background = element_rect(fill = "lightblue", color = "blue", linetype = "dashed", size = 1))

4)空元素 (element_blank)

  • 用途: 隐藏特定元素
  • 常用场景: 隐藏网格线、图例、坐标轴等。

示例

theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank())

- 按调整对象介绍

1)背景和边框

  • plot.background:设置整个图的背景。
theme(plot.background = element_rect(fill = "lightblue", color = "blue"))
  • panel.background:设置绘图区域的背景。
theme(panel.background = element_rect(fill = "lightgray", color = "gray"))
  • panel.border:设置绘图区域的边框。
theme(panel.border = element_rect(color = "black", fill = NA))

2)网格线

  • panel.grid.major:设置主网格线。
theme(panel.grid.major = element_line(color = "gray", linetype = "dashed"))
  • panel.grid.minor:设置次网格线。
theme(panel.grid.minor = element_line(color = "gray", linetype = "dotted"))

3)坐标轴

  • axis.text:设置坐标轴刻度文字。
theme(axis.text = element_text(color = "black", size = 12))
  • axis.text.x:设置 x 轴刻度文字。
theme(axis.text.x = element_text(color = "blue", size = 12, angle = 45, hjust = 1))
  • axis.text.y:设置 y 轴刻度文字。
theme(axis.text.y = element_text(color = "green", size = 14))
  • axis.title:设置坐标轴标题。
theme(axis.title = element_text(color = "black", size = 14))
  • axis.title.x:设置 x 轴标题。
theme(axis.title.x = element_text(color = "red", size = 14, face = "bold"))
  • axis.title.y:设置 y 轴标题。
theme(axis.title.y = element_text(color = "purple", size = 14, face = "italic"))

4)图例

  • legend.position:设置图例位置,可以是 “left”、“right”、“top”、“bottom”、“none” 或坐标位置如 (0.5, 0.5)。
theme(legend.position = "top")
  • legend.title:设置图例标题。
theme(legend.title = element_text(color = "purple", size = 14))
  • legend.text:设置图例文字。
theme(legend.text = element_text(color = "orange", size = 12))
  • legend.background:设置图例的背景样式,包括背景颜色、边框颜色、边框线型等。
theme(legend.background = element_rect(fill = "lightblue", color = "blue", linetype = "dashed"))

5)标题和标签

  • plot.title:设置图形标题。
theme(plot.title = element_text(color = "red", size = 16, face = "bold"))
  • plot.subtitle:设置图形副标题。
theme(plot.subtitle = element_text(color = "blue", size = 14))
  • plot.caption:设置图形说明文字。
theme(plot.caption = element_text(color = "gray", size = 10))

七、分面 (Facets)

1、分面概述

分面(Facets)在ggplot2中是一种有效的数据可视化方式,通过将数据分成不同的子图来比较不同子集的关系。单维度分面使用facet_wrap()函数,它基于一个变量将数据分成多个面板;而多维度分面使用facet_grid()函数,可以基于两个变量创建二维面板。

示例:

# 单维度分面
ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point() +
  facet_wrap(~class)

# 多维度分面
ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point() +
  facet_grid(drv ~ cyl)

2、调整分面布局

调整分面布局可以通过设置参数ncol和nrow来实现,它们分别控制分面的列数和行数。

示例:

ggplot(data = mpg, aes(x = displ, y = hwy)) +
  geom_point() +
  facet_wrap(~class, ncol = 2)

八、画图实践

1、如何用R语言ggplot2画高水平期刊散点图
2、如何用R语言ggplot2画箱线图
3、如何用R语言ggplot2画折线图

待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值