跳至主要内容

使用 ggplot2 作图教程

数据可视化是数据科学家的必备技能。它以有意义且恰当的方式将统计与设计相结合。
· 6分钟 阅读

使用 AI 探索

数据可视化是数据科学家的必备技能。它以有意义且恰当的方式将统计与设计相结合。一方面,数据可视化是图形化数据分析的一种形式,强调准确呈现与解读数据。另一方面,数据可视化依赖良好的设计选择,让图形更具吸引力,并有助于理解和传达结果。除此之外,数据可视化的本质是一种视觉传播形式,也包含一定的创造性。

数据可视化维恩图

理解探索型与说明型可视化之间的区别非常重要。探索型可视化易于生成、数据量大,面向小范围的专业受众,例如您和您的同事——其主要目的在于图形化数据分析。说明型可视化则耗时费力、针对特定数据,面向更广泛的受众,例如发表物或演示文稿——它们是沟通过程的一部分。作为数据科学家,快速探索数据很重要,但您也需要向相关方解释您的结果。好的设计始于对受众的思考——有时,这个受众就是我们自己。

数据科学家可视化图

散点图

下面这个数据集包含了 62 种哺乳动物的平均脑重与体重。

 MASS::mammals
                              body   brain
Arctic fox                   3.385   44.50
Owl monkey                   0.480   15.50
Mountain beaver              1.350    8.10
Cow                        465.000  423.00
Grey wolf                   36.330  119.50
Goat                        27.660  115.00
Roe deer                    14.830   98.20
...
Pig                        192.000  180.00
Echidna                      3.000   25.00
Brazilian tapir            160.000  169.00
Tenrec                       0.900    2.60
Phalanger                    1.620   11.40
Tree shrew                   0.104    2.50
Red fox                      4.235   50.40 

要理解两者之间的关系,最显而易见的第一步是绘制散点图,如下所示:

ggplot(mammals, aes(x = body, y = brain)) +
  geom_point()
散点图

有两种哺乳动物——非洲象和亚洲象——它们的脑重与体重都非常大,导致两个坐标轴都呈现正偏态。

线性模型

如果此时直接拟合线性模型,会是个糟糕的选择,因为少数极端值会产生很大的影响。

ggplot(mammals, aes(x = body, y = brain)) +
  geom_point(alpha = 0.6) +
  stat_smooth(
    method = "lm",
    color = "red",
    se = FALSE
  )
散点图上的线性模型

对两个变量同时进行对数变换,可以得到更好的拟合效果。

ggplot(mammals, aes(x = body, y = brain)) +
  geom_point(alpha = 0.6) +
  coord_fixed() +
  scale_x_log10() +
  scale_y_log10() +
  stat_smooth(
    method = "lm",
    color = "#C42126",
    se = FALSE,
    size = 1
  )
线性散点图的对数变换

因此,尽管我们从一个粗略的探索性图形开始,但它让我们更了解数据并得到有意义的结果。

安斯库姆图

当我们想象一个线性模型时,如这个匿名图所示,我们会以为自己在描述看起来大致像这样的数据。

匿名图上的线性模型

但同样的模型也可能在描述完全不同的数据,比如抛物线关系,这就需要不同的模型。

抛物线关系图

或者是一个极端值产生巨大影响的数据集;当去除该离群点后,这一点就会变得清晰。

移除离群点后的线性图

有时,模型可能在描述某种关系,而实际上并不存在,因为某些极端值可能是不正确的。

线性图中的错误极端值

如果我们只依赖数值输出而不绘制数据,就会错过那些独特且有趣的潜在趋势。

线性图中的趋势

我们可以看到,数据可视化植根于统计学与图形化数据分析,但它同时也是一个包含试错过程的创造性实践。

交互示例

在以下示例中,您将首先使用 library() 加载 ggplot2 包。然后,使用 str() 来探索 mtcars 数据集的结构。

最后,您将可视化该 ggplot,并尝试理解 ggplot 如何处理数据。

您将使用的 mtcars 数据集来自 1973 年《Motor Trend》杂志,包含 32 款汽车的信息。该数据集规模小、直观,且包含多种连续和分类型变量。

# Load the ggplot2 package
library(ggplot2)

# Explore the mtcars data frame with str()
str(mtcars)

# Execute the following command
p <- ggplot(mtcars, aes(cyl, mpg)) +
  geom_point()

运行以上代码后,会得到如下结果:

data.frame':    32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
gg 图

要进一步学习使用 ggplot 进行数据可视化,请观看我们的课程 Introduction to Data Visualization with ggplot2 中的视频。同时,随身备一份我们的 ggplot2 速查表 以便快速参考。 

本文内容选自 DataCamp 的课程 Introduction to Data Visualization with ggplot2,作者 Rick Scavetta。

主题