当前位置:   article > 正文

R语言:ggplot2包详解及各类精美图形绘制

ggplot2

1.1 Ggplot2介绍

ggplot2是一个R包,用于生成统计或数据图形。

与大多数其他图形包不同,ggplot2有一个基于图形语法的底层语法,允许通过组合独立的组件来组成图形。

可以根据特定的问题创建新的图形,而不是局限于预定义的图形集,这就是ggplot2的强大之处。

Ggplot2实际上很容易学习:有一组简单的核心原则,很少有特殊情况。

1.2 Ggplot2特点
默认值

Ggplot2提供了漂亮的、简便使用的图形,用户不必关心绘制图例等繁琐的细节。

它提供了大量的默认值,这意味着用户可以在短时间内生成并发布高质量的图形。用户不必花费时间使图形看起来更漂亮,而是可以专注于创建最能揭示数据中的信息的图形。

但如果确实有特殊的格式要求,ggplot2也提供了许多可修改的方式。

迭代

Ggplot2包迭代地进行工作。从显示原始数据开始,然后添加注释和统计层。

这允许用户使用与设计分析相同的结构化思维来生成图形。这可以缩短你脑海中的图片和书本上的图片之间的距离。这对那些还没有掌握专家使用的结构化分析方法的学生尤其有帮助。

高级元素

大多数图形包只是一个特殊图形的集合。例如,在R环境下,如果你设计了一个由原始的图形元素(如线和点)组成的图形,很难设计出与现有的图形相结合的新组件。在ggplot2中,用于创建新图形的表达式由更高级的元素组成,比如原始数据和统计转换的表示,这些元素可以很容易地与新数据集和其他图组合。

1.3 Ggplot2映射组件

所有的图都是由数据、你想要可视化的信息和映射(描述数据变量如何映射到属性)组成的。映射组件如下:

layer

层是几何元素和统计变换的集合。几何元素(简写为geoms)代表你在图形中实际看到的东西:点、线、多边形等。统计转换,简称stats,对数据进行总结:例如,对观察结果进行分类和计数以创建一个直方图,或拟合一个线性模型。

Scale

比例尺将数据空间中的值映射到空间中的值。这包括颜色、形状和大小的使用。比例尺还绘制图例和轴,这使得从图中读取原始数据值成为可能(反向映射)。

coord

坐标或坐标系描述数据坐标如何映射到图形的平面。它还提供了坐标轴和网格线来帮助阅读图表。我们通常使用笛卡尔坐标系,但也有其他一些可用的坐标系,包括极坐标和地图投影。

theme

主题控制显示的细节,比如字体大小和背景颜色。虽然ggplot2中的默认值已经经过作者的仔细思考选择,但用户可能仍需要参考其他资料来创建一个更加有吸引力的图。

1.4 Ggplot2自带数据集

使用捆绑在ggplot2: mpg中的一个数据集。它包括1999年和2008年流行车型的燃油经济性信息,由美国环境保护署(http://fueleconomy.gov)收集。你可以通过加载ggplot2来访问数据:

> library(ggplot2)
> mpg
# A tibble: 234 x 11
   manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
   <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
 1 audi         a4           1.8  1999     4 auto~ f        18    29 p     comp~
 2 audi         a4           1.8  1999     4 manu~ f        21    29 p     comp~
 3 audi         a4           2    2008     4 manu~ f        20    31 p     comp~
 4 audi         a4           2    2008     4 auto~ f        21    30 p     comp~
 5 audi         a4           2.8  1999     6 auto~ f        16    26 p     comp~
 6 audi         a4           2.8  1999     6 manu~ f        18    26 p     comp~
 7 audi         a4           3.1  2008     6 auto~ f        18    27 p     comp~
 8 audi         a4 quattro   1.8  1999     4 manu~ 4        18    26 p     comp~
 9 audi         a4 quattro   1.8  1999     4 auto~ 4        16    25 p     comp~
10 audi         a4 quattro   2    2008     4 manu~ 4        20    28 p     comp~
# ... with 224 more rows
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这些变量大多是不言自明的:

  • Cty和hwy记录了城市和高速公路行驶的每加仑英里数。
  • Displ是以升为单位的发动机排量。
  • DRV是传动系统:前轮(f),后轮®或四轮(4)。
  • Model是汽车的型号。有38款车型入选,因为它们在1999年至2008年期间每年都会推出新版。
  • class是描述汽车“类型”的分类变量:双座、SUV、紧凑型等。
1.5 Ggplot2组成部分

组成部分:

  • 数据
  • 数据中的变量和视觉属性之间的一组映射
  • 至少存在一个layer描述如何渲染每个观察,层通常使用geom函数创建

比如:

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point()
  • 1
  • 2

注意观察上述代码的形式:

数据和映射在ggplot()中传入,然后用+添加层。

得到绘图结果如下:

在这里插入图片描述

此案例中的组成部分:

  • 数据:mpg
  • 映射:displ映射到x位置,hwy映射到y位置。
  • 层:geom_point()

这幅图显示了一种很强的相关性:随着发动机尺寸(displ)的增大,燃油经济性(hwy)就会变差。

1.6 美观性参数

与数据x,y相同 这些参数也在aes()中调用,如这样的方式

aes(displ, hwy, colour = class)
aes(displ, hwy, shape = drv)
aes(displ, hwy, size = cyl)
  • 1
  • 2
  • 3

在这里插入图片描述

colour = class给每一个点一个独特的颜色对应它的类别。这个图例允许我们从颜色中读取数据值。

如果您想修改图片的美观性参数,而不缩放它的尺寸,请在aes()之外的单个层中这样做,如下方式:

ggplot(mpg, aes(displ, hwy)) + geom_point(aes(colour = "blue"))
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")
  • 1
  • 2

在这里插入图片描述
在这里插入图片描述

同样是使用"blue"蓝色作为输入,但前一图被调整为粉红色并添加了图例,后一图则正确显示了蓝色。

当在图形中使用美学属性时,少即是多。我们很难同时看到颜色、形状和大小之间的关系,所以在使用美学时要克制。不要试图制作一个非常复杂的图形,同时展示一切,去创造一系列简单的图形,讲述一个故事,引导读者从无知到知识。

1.7 多子图绘制

在图形上显示附加类别变量的另一种技术是子图。Faceting通过将数据划分为子集并为每个子集显示相同的图形来创建图形表。

存在两种类型的子图技术 grid 与 wrapped

在末尾进行追加即可

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  facet_wrap(~class)
  • 1
  • 2
  • 3

在这里插入图片描述

1.8 图形类型与函数

Geom_point()将数据散点描绘在坐标轴中,表示数据的分布状况。

Geom_smooth()为数据提供平滑器并显示平滑器及其标准误差。

Geom_boxplot()生成一个箱线图来总结一组点的分布。

Geom_histogram()和geom_freqpoly()表示连续变量的分布。

Geom_bar()显示类别变量的分布。

Geom_path()和geom_line()在数据点之间绘制直线。线状图被限制为从左到右移动的线,而路径可以向任何方向移动。线条通常用于探索事物随时间的变化。

1.9 曲线拟合

可以单独或是联合使用 例如:

ggplot(mpg, aes(displ, hwy)) + 
  geom_point() + 
  geom_smooth()
  • 1
  • 2
  • 3

在这里插入图片描述

这用平滑的曲线覆盖了散点图,包括以灰色显示的点的置信区间形式对不确定性的评估。如果您对置信区间不感兴趣,可以使用geom_smooth(se = FALSE)关闭它。

参数:

geom_smooth()的一个重要参数是method,它允许您选择使用哪种类型的模型来拟合光滑曲线.

可选值如 “loess” " lm" “gam” “rlm”

span控制线条摆动程度 0~1逐渐平稳

1.10 箱线图

最基础的箱线图代码:

ggplot(mpg, aes(drv, hwy)) + geom_boxplot()
ggplot(mpg, aes(drv, hwy)) + geom_violin()
  • 1
  • 2

在这里插入图片描述

在这里插入图片描述

它们可以很简单地调整样式 通过size colour shape fill等属性,例如此处我们增加填充色

ggplot(mpg, aes(drv, hwy)) + geom_violin(fill = "blue")
  • 1

在这里插入图片描述

1.11 频率直方图与密度曲线

一行代码:

ggplot(数据, aes(数值变量)) + geom_histogram()/ geom_freqpoly()
  • 1

示例:

ggplot(mpg, aes(hwy)) + geom_histogram()
  • 1

在这里插入图片描述

ggplot(mpg, aes(hwy)) + geom_freqpoly()
  • 1

在这里插入图片描述

直方图和密度曲线的工作原理是一样的:它们将数据归类,然后计算每个归类中的观察次数。唯一的区别是显示:直方图使用柱状图,密度曲线使用折线。

参数:

你可以用binwidth参数来控制箱子的宽度

如果你不想要均匀间隔的箱子,使用breaks参数。

ggplot(mpg, aes(hwy)) + geom_histogram(binwidth = 10.5)
  • 1

在这里插入图片描述

能够观察到分组减少了许多。

1.12 柱状图

进行计数或是展示数值。

ggplot(mpg, aes(manufacturer)) + 
  geom_bar()
  • 1
  • 2

在这里插入图片描述

1.13 时间序列

在x轴上有时间,显示单个变量随时间的变化,通常以折线图的方式进行时间序列数据的展示。

代码方式与之前类似

ggplot(economics, aes(date, unemploy / pop)) +
  geom_line()
ggplot(economics, aes(date, uempmed)) +
  geom_line()
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

在这里插入图片描述

为了更详细地研究这种关系,我们想在同一个图上绘制两个时间序列。我们可以画出失业率与失业时间长短的散点图,但这样我们就无法看到随着时间的演变。解决方法是将时间上与线段相邻的点连接起来,形成路径图,并进行颜色深浅度的区分。

在这里插入图片描述

更加直观观察双变量在时间推移下的变化。

1.14 散点图
ggplot(mpg, aes(displ, hwy)) + geom_point(colour = "blue")
  • 1

拥有数据集,从中选择X轴与Y轴数据,并加入geom_point层,即可绘制散点图。

在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/132027
推荐阅读
相关标签
  

闽ICP备14008679号