R 语言可视化入门:使用 ggplot2 创建高质量图表

该文章已生成可运行项目,

【精选优质专栏推荐】


每个专栏均配有案例与图文讲解,循序渐进,适合新手与进阶学习者,欢迎订阅。

在这里插入图片描述

前言

R 中最受欢迎的绘图库之一不是 R base 自带的绘图函数,而是 ggplot2 库。人们使用它是因为它非常灵活。该库遵循“图形语法(grammar of graphics)”的理念,即不是通过函数调用直接生成可视化,而是先定义图中应包含的元素,然后在生成图片前进一步调整。

在本文中,你将学习 ggplot2 并看到一些示例。具体来说,你将学到:

  • 如何利用 ggplot2 从数据集创建图表

  • 如何使用 ggplot2 创建带有多种视角的各种图表

本文分为两部分:

  1. ggplot2 入门

  2. ggplot2 绘图示例

ggplot2 入门

首先,你需要在 R 环境中安装 ggplot2:

install.packages("ggplot2")

安装完成后,需要加载库才能使用其功能:

library(ggplot2)

一个 ggplot2 的示例是加载简单的数据集,例如 iris 分类数据集,并绘制图表:

iris |> ggplot() + geom_point(aes(x=Petal.Width, y=Petal.Length, color=Species))

这里首先用数据集 iris 创建一个绘图对象,但此时它是一个空白画布。接着,你希望在画布上添加散点图,即将数据点绘制为单独的点。通过向 ggplot 对象添加 geom_point(),并使用 aes() 指定每个点的坐标和颜色,就可以实现这一点。

该图表的输出结果如下:

在这里插入图片描述

这确实是一个可以赋值给变量的绘图对象。为了展示图形语法(grammar of graphics)的理念,你会注意到两个坐标轴默认是以数据列名作为标签的,同时你也可以为坐标轴标签和主题添加修饰:

picture <- iris |> ggplot() + geom_point(aes(x=Petal.Width, y=Petal.Length, color=Species))
picture <- picture + labs(title="Scatter plot of iris dataset",
                          x="Petal width/cm",
                          y="Petal lenght/cm") + theme_classic()
picture

这样你将得到一张略有不同的图表:

在这里插入图片描述

如果你想在图表上叠加不同的图形或者改变某些样式,只需向绘图对象添加相应的修饰函数即可。

ggplot2 绘图示例

下面我们通过一些实例进一步了解 ggplot2 的使用方法。

我们以 mtcars 数据集为例。该数据集内容如下所示:

print(mtcars)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
...
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

该数据集共有 32 行,每行包含 11 个属性。这里我们只考虑 mpg(每加仑英里数)这一列,并创建直方图和密度图示例:

ggplot(mtcars, aes(x=mpg, y=..count..)) + geom_histogram(bins=10) + geom_density()

这里的代码解释如下:

  • ggplot(mtcars, aes(x=mpg, y=…count…)):使用 mtcars 数据集创建绘图对象,将 mpg 列映射到 x 轴,计数映射到 y 轴。

  • geom_histogram(bins=10):绘制 10 个区间的直方图,显示 mpg 分布。

  • geom_density():在同一图上叠加密度曲线,显示数据的平滑分布趋势。

通过这种方式,你可以轻松在同一张图中叠加不同图层,从而实现更丰富的可视化效果。

在这里插入图片描述

在这里,你可以看到如何在同一张图表上叠加两种不同的图形。另一个你可能会觉得有用的例子是,将散点图与线性回归叠加:

ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() + geom_smooth(method=lm)

在这里插入图片描述

你定义了一个带有指定 x 轴和 y 轴的 ggplot 对象。然后绘制点和拟合平滑线。注意,在 geom_smooth() 中需要使用 method=lm 才能得到直线。默认情况下,它相当于 method=loess,会使用局部加权回归平滑(locally estimated scatterplot smoothing)算法生成曲线。

有时,你可能希望绘制三个不同的属性。与其使用 3D 图,不如在一个二维图中使用多个分面(facets),前提是其中一个属性是分类变量。下面是一个示例,将 mpg 对 wt 绘图,并按 cyl 的不同值进行分面:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + facet_grid(rows=vars(cyl))

在这里插入图片描述

注意,如果你希望使用列分面,可以将上面的 rows= 参数替换为 cols=。分面图的一个缺点是,图表必须具有相似性质。如果你想在保持最高灵活性的情况下将两个不同的图表并排显示,可以使用 cowplot 包:

library(cowplot)
left <- ggplot(mtcars, aes(group=cyl, x=cyl, y=mpg)) + geom_boxplot() + theme_bw()
right <- ggplot(mtcars, aes(wt, mpg)) + geom_point() + geom_smooth(method=lm)
plot_grid(left, right)

这将生成如下图表:

在这里插入图片描述

总结

在本文中,你学习了 R 中的 ggplot2 库。具体来说,你学到了:

  • 如何使用图形语法(grammar of graphics)创建图表

  • 如何使用 ggplot2 创建散点图、折线图和直方图

  • 如何在同一张图表中创建多个图形

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋说

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值