资源链接 (PDF格式):【数据科学笔记】第四章 数据可视化.pdf 983KB
资源链接 (HTML格式):【数据科学笔记】第四章 数据可视化rstudio.html 1.68MB
数据可视化是指将结构的或非结构的数据转换成适当的可视化图表,可视化能够将数据更加直接的方式展示出来,使得数据从客观更有说服力。
R语言有自己的基础图形系统,如 graphics 包、 grid 包或者 lattice 包。相比于R语言自带的基础作图函数,如plot()
能表现出更加丰富化、 多样化。
ggplot2 包是一个有着一套完整图形语法支持的软件包,该绘图包的特点在于定义各种底层组件来合成复杂的图形,而不是直接定义的图形。
通常 ggplot2 生成图形的必须步骤如下:
aes()
函数指定用来表示数据值的形状特征。ggplot2 中的函数
qplot()
和传统绘图中的plot()
功能类似。
(一)散点图
基本的散点图绘制可以用 qplot()
。
library(ggplot2)
data(mpg)
# qplot(displ , cty , data = mpg)
# qplot(displ, cty, data = mpg, colour=class)
# qplot(displ,cty, data = mpg,shape= fl)
qplot( displ , cty , data = mpg , colour = class , shape = fl )
(二)条形图和箱线图
对于离散型变量,频数一般使用条形图来绘制,这里直接使用
geom = 'bar'
即可。
例如,汽车气缸数目的条形图:
qplot(cyl , data = mpg , geom = 'bar')
如果想要描述持续变量在不同类别下的变化情况可以使用箱线图,只需要设置参数
geom = 'boxplot'
。
qplot(as.factor(cyl), displ, data = mpg, geom = 'boxplot')
不同气缸数目下发动机排量箱线图
对于连续型数据,我们最常见的是直方图和密度曲线图,只需要修改参数
geom = 'histogram
和geom = 'density'
在此不做举例说明。
(三)时间序列图
对于时间序列的数据所绘制的图形称为线条图, 它只通过添加参数
geom = 'line'
。
# 使用economics 数据集绘制一个关于个人存储的时间序列图
qplot (date , psavert , data = economics , geom = 'line')
上面介绍了使用
qplot()
函数绘制基础图形, 但是qplot()
有它的局限性,因为它只能使用一个数据集和一组图形属性映射。可以使用图层来解决这个问题,每个图层都可以有自己的数据集和图形属性映射,附加的数据元素可以通过图层添加到图形中。
一个图层由五个部分组成:
(1)数据,必须是一个数据框 (dataframe) ,在绘图结束后可以修改。
(2)图形属性映射,设定数据集中变量如何映射到改图层的图像属性。
(3)几何对象,指定使用那种几何来绘图。
(4)统计变换,对原数据做一些有用的统计变换。
(5)位置调整,通过调整元素位置避免图像重合。
主要讲解前三个部分
(一) 数据
ggplot2
对于数据集的邀请是必须是一个数据框。 ggplot2
会从我们指定的数据框中提取绘图所需变量,生成新的数据集。用 mpg
数据集为例。
(二) 图形属性映射
1. 创建绘图对象
当我们调用 ggplot2
函数时,可以手动创建图层对象。主需将图层属性和变量放到 aes()
函数的括号里。
# 设定了默认映射, 但这个图层未添加图层。
p <- ggplot ( mpg , aes ( displ , cty , colour = class ) )
2. 图形属性
aes()
函数用来将数据变量映射到图形中,在上面例子中 aes ( displ , cty , colour = class )
将 x
坐标映射到 displ
, y
坐标映射到 cty
, colour
映射到class
,这和 qplot()
用法一致。
3. 图和图层
默认的图层属性映射可以在图形对象初始化的时候设定,后可以通过 +
进行修改。
>>>p <- ggplot( mpg )
>>>summary( p )
data: manufacturer, model, displ, year, cyl, trans, drv, cty,
hwy, fl, class [234x11]
>>>p <- p + aes ( displ , hwy )
>>>summary( p )
data: manufacturer, model, displ, year, cyl, trans, drv, cty,
hwy, fl, class [234x11]
mapping: x = ~displ, y = ~hwy
faceting: <ggproto object: Class FacetNull, Facet, gg>
4. 设定和映射
我们还可以在图层参数里设置一个单一值, 如 colour = 'green'
。 下面举例用图层里的 colour 参数设定颜色。
p <- ggplot( mpg , aes(displ, hwy))
p + geom_point( colour = 'green')
这里将 colour
映射到 green
,实际上首先创建了只有green
字符的变量,然后将colour
映射到新的变量上。 因为这个新变量的值是离散的,所以默认的颜色标度将使用色轮上等距的颜色,并且此处新变量就一个值,因此这个颜色就是桃红色。
p + geom_point( aes(colour = 'green'))
(三) 几何对象
几何图形对象( 简称geom ),它决定了生成的图像类型。
有些几何对象主要在它们参数化的方式上有所不同。例如,矩阵几何对象( rect geom ), 设定的是它的上( ymax )、 下( ymin )、 左( xmin )、 右( xmax )位置。
下面列出部分常用几何对象的图形属性。
几何对象 | 描述 | 图形属性 |
---|---|---|
geom_point() | 数值符号 | x , y , sahpe , file |
geom_line() | 直线(按x排序) | x , y , linetype |
geom_path() | 直线(按原始排序) | x ,y , linetype |
geom_text() | 文本标签 | x , y , angle , hjust , vjust |
geom_rect() | 矩阵 | xmin , xmax , ymin , ymax , fill , linetype |
geom_polygon() | 多边形 | x , y , fill , linetype |
geom_segment() | 线段 | x , y , xend , yend , linetype |
geom_bar() | 条状图 | x , fill , linetype , weight |
geom_histogram() | 直方图 | x , fill , linetype , weight |
geom_boxplot() | 箱线图 | x , y , fill , weight |
geom_density() | 密度图 | x , y , fill , linetype |
geom_contour() | 等高线图 | x , y , fill , linetype |
geom_smooth() | 光滑曲线 | x , y , fill , linetype |
All | color , size , group |
分面能够帮我们快速分析出数据各子集模式的异同。
ggplot2
提供两种分面类型,网格型( facet_grid ) 和封装型( facet_wrap ) 。
分面生成一个二维的网格面板, 面板的行与列通过变量来定义。本小结使用 mpg 数据集的子集来进行展示。
(一)网格分面
1. 不分面
这里因为 mpg 数据集中气缸数目 cyl 的值为 5 的观测数目极少,暂时舍去, 将其余的数据作为进行分析的子集
submpg <- subset( mpg , cyl != 5 )
qplot (cty , hwy , data = submpg ) + facet_null() # 不进行分面
2. 一行多列
qplot (cty , hwy , data = submpg ) + facet_grid( . ~ cyl)
3. 一列多行
qplot(cty , data = submpg, geom = 'histogram' , binwidth = 2 ) + facet_grid(cyl ~. ) # 一列多行
4. 多行多列
qplot( cty , hwy , data = submpg ) + facet_grid( drv ~ cyl ) # 多行多列
(二) 封装分面
facet_wrap
首先生成一个唱的面板条块,然后将它封装在二维面板中。
ggplot(mpg ,aes(displ , cty )) + geom_point() + facet_wrap( ~ cyl , nrow = 2)
有的知识点比较抽象,需要多看、多试、多动手才能更好的理解代码的含义。