ggplot2|详解八大基本绘图要素(一)

简介: ggplot2|详解八大基本绘图要素

本文首发于“生信补给站”公众号 ggplot2|详解八大基本绘图要素

"一张统计图形就是从数据到几何对象(geometric object, 缩写为geom, 包括点、线、条形等)的图形属性(aesthetic attributes, 缩写为aes, 包括颜色、形状、大小等)的一个映射。此外, 图形中还可能包含数据的统计变换(statistical transformation, 缩写为stats), 最后绘制在某个特定的坐标系(coordinate system,  缩写为coord)中, 而分面(facet, 指将绘图窗口划分为若干个子窗口)则可以用来生成数据中不同子集的图形。"

                                                                                        ----- Hadley Wickham      


一 ggplot2 背景介绍

ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。

  • 数据(Data)和映射(Mapping)
  • 几何对象(Geometric)
  • 标尺(Scale)
  • 统计变换(Statistics)
  • 坐标系统(Coordinante)
  • 图层(Layer)
  • 分面(Facet)
  • 主题(Theme)

二 数据(data) 和 映射(Mapping)

数据:用于绘制图形的数据,本文主要使用经典的mtcars数据集和diamonds数据集子集为例来画图。

#install.packages("ggplot2")
library(ggplot2)
data(diamonds)
set.seed(1234)
diamond <- diamonds[sample(nrow(diamonds), 2000), ]
head(diamond)
# A tibble: 6 x 10
 carat cut     color clarity depth table price     x     y     z
 <dbl> <ord>   <ord> <ord>   <dbl> <dbl> <int> <dbl> <dbl> <dbl>
1  0.91 Ideal   G     SI2      61.6    56  3985  6.24  6.22  3.84
2  0.43 Premium D     SI1      60.1    58   830  4.89  4.93  2.95
3  0.32 Ideal   D     VS2      61.5    55   808  4.43  4.45  2.73
4  0.33 Ideal   G     SI2      61.7    55   463  4.46  4.48  2.76
5  0.7  Good    H     SI1      64.2    58  1771  5.59  5.62  3.6
6  0.33 Ideal   G     VVS1     61.8    55   868  4.42  4.45  2.74

映射:aes()函数是ggplot2中的映射函数, 所谓的映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系, 图形的颜色,形状,分组等都可以通过通过数据集中的变量映射。

#使用diamonds的数据子集作为绘图数据,克拉(carat)数为X轴变量,价格(price)为Y轴变量。

p <- ggplot(data = diamond, mapping = aes(x = carat, y = price))

#将钻石的颜色(color)映射颜色属性:

p <- ggplot(data=diamond, mapping=aes(x=carat, y=price, shape=cut, colour=color))
p+geom_point() #绘制点图

#将钻石的切工(cut)映射到形状属性:

p <- ggplot(data=diamond, mapping=aes(x=carat, y=price, shape=cut))
p+geom_point() #绘制点图

#将钻石的切工(cut)映射到分组属性:

#默认分组设置, 即group=1
p + geom_boxplot()
#分组(group)也是ggplot2种映射关系的一种, 如果需要把观测点按额外的离散变量进行分组处理, 必须修改默认的分组设置。
p1 <- ggplot(data=diamond, mapping=aes(x=carat, y=price, group=factor(cut)))
p1 + geom_boxplot()
注意:不同的几何对象,要求的属性会有些不同,这些属性也可以在几何对象映射时提供,以下语法与上面的aes中是一样的。
#结果与上述一致
ggplot(data = diamond)+geom_point(aes(x=carat, y=price, colour=color))
ggplot(data = diamond) +geom_point(aes(x=carat, y=price, shape=cut))
ggplot(data = diamond) +geom_boxplot(aes(x=carat, y=price, group=factor(cut)))
ggplot(data = diamond) +geom_point(aes(x=carat, y=price, colour=color,shape=cut))

注:ggplot2支持图层,可以把不同的图层中共用的映射提供给ggplot函数,而某一几何对象才需要的映射参数提供给geom_xxx函数。


三 几何对象(Geometric)

几何对象代表我们在图中实际看到的图形元素,如点、线、多边形等。数据与映射部分介绍了ggplot函数执行各种属性映射,只需要添加不同的几何对象图层,即可绘制出相应的图形。

此处介绍几种常用的几何对象,geom_histogram用于直方图,geom_bar用于画柱状图,geom_boxplot用于画箱式图等。

直方图

单变量连续变量:可绘制直方图展示,提供一个连续变量,画出数据的分布。

#以价格(price)变量为例,且按照不同的切工填充颜色

ggplot(diamond)+geom_histogram(aes(x=price, fill=cut))

#设置position="dodge",side-by-side地画直方图

ggplot(diamond)+geom_histogram(aes(x=price, fill=cut), position="dodge")

#设置使用position="fill",按相对比例画直方图

ggplot(diamond)+geom_histogram(aes(x=price, fill=cut), position="fill")

柱状图

单变量分类变量:可使用柱状图展示,提供一个x分类变量,画出数据的分布。

#以透明度(clarity)变量为例,且按照不同的切工填充颜色,柱子的高度即为此分类下的数目。

ggplot(diamond)+geom_bar(aes(x=clarity, fill=cut))

注:ggplot2会通过x变量自动计算各个分类的数目。

#直接指定个数,需要通过stat参数,指定geom_bar按特定高度画图

ggplot()+geom_bar(aes(x=c(LETTERS[1:5]),y=1:5), stat="identity")

区分与联系:

直方图把连续型的数据按照一个个等长的分区(bin)切分,然后计数画柱形图。

柱状图是把分类数据,按类别计数。


箱式图

箱线图通过绘制观测数据的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了变量值的分布情况。同时箱线图能够显示出离群点(outlier),通过箱线图能够很容易识别出数据中的异常值。

#按切工(cut)分类,对价格(price)变量画箱式图,再按照color变量分别填充颜色。

ggplot(diamond,aes(x=cut, y=price,fill=color))+geom_boxplot()

ggplot(diamond)+geom_boxplot(aes(x=cut, y=price,fill=color))


以上可见,通过映射和几何对象就可以将数据集中的变量数值变成几何图形以及几何图形的各种图形元素。

注:每一种几何对象所能涉及的aes()类型有区别,在绘制对应对象的时候,要注意选择正确的映射方式,以下仅供参考:

geom stat aes
geom_abline abine colour,linetype,size
geom_area identity colour,fill,linetype,size,x,y
geom_bar bin colour,fill,linetype,size,weight,x
geom_bin2d bin2d colour,fill,linetype,size,weight,xmax,xmin,ymax,ymin
geom_blank identity
geom_boxplot boxplot colour,fill,lower,middle,size,upper,weight,x,ymax.ymin
geom_contour contour colour,linetype,size,weight,x
geom_crossbar identity colour,fill,linetype,size,x,y,ymax,ymin
geom_density density colour,fill,linetype,size,weight,x,y
geom_density2d density2d colour,linetype,size,weight,x,y
geom_dotplot bindot colour,fill,x,y
geom_errorbar identity colour,linetype,size,width,x,ymax,ymin
geom_errorbarh identity colour,linetype,size,width,x,ymax,ymin
geom_freqpoly bin colour,linetype,size
geom_hex binhex colour,fill,size,x,y
geom_histogram bin colour,fill,linetype,size,weight,x
geom_hline hline colour,linetype,size
geom_jitter identity colour,fill,shape,size,x,y
geom_line identity colour,linetype,size,x,y
geom_linerange identity colour,linetype,size,size,x,ymax,ymin
geom_map identity colour,fill,linetype,size,x,y,map_id
geom_path identity colour,linetype,size,x,y
geom_point identity colour,fill,shape,size,x,y
geom_pointrange identity colour,fill,linetype,shape,size,x,ymax,ymin
geom_polygon identity colour,fill,linetype,size,x,y
geom_quantile quantile colour,linetype,size,weight,x,y
geom_raster identity colour,fill,linetype,size,x,y
geom_rect identity colour,fill,linetype,size,xmax,xmin,ymax,ymin
geom_ribbon identity colour,fill,linetype,size,x,ymax,ymin
geom_rug identity colour,linetype,size
geom_segment identity colour,linetype,size,x,xend.y.yend
geom_smooth smooth aplha,colour,fill,linetype,size,weight,x,y
geom_step identity colour,linetype,size,x,y
geom_text identity angle,colour,hjust,label,size,size,vjust,x,y
geom_tile identity colour,fill,linetype,size,x,y
geom_violin ydensity weigth,colour,fill,size,linetype,x,y
geom_vline vline colour,linetype,size
相关文章
|
编解码 数据可视化 索引
Matplotlib引领数据图表绘制
Matplotlib引领数据图表绘制
|
自然语言处理 数据可视化 算法
第5章 数据可视化——5.4 四维图形可视化
第5章 数据可视化——5.4 四维图形可视化
|
3月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
6月前
|
数据可视化 定位技术 网络架构
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
R语言在地图上绘制月亮图、饼状图数据可视化果蝇基因种群
|
6月前
|
算法 数据可视化
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
R语言社区检测算法可视化网络图:ggplot2绘制igraph对象分析物种相对丰度
|
JSON 数据可视化 定位技术
可视化 | Python绘制高颜值台风地理轨迹图
可视化 | Python绘制高颜值台风地理轨迹图
|
JavaScript 数据可视化 前端开发
[数据可视化]绘制持仓榜单的“棒棒糖图”
首先对数据进行清洗和处理, pandas读取数据,这里需要去除 000905_SH 列,以及删除全0行。
|
6月前
|
数据可视化 测试技术 定位技术
数据可视化——如何绘制地图
数据可视化——如何绘制地图
|
数据可视化 关系型数据库
第5章 数据可视化——5.2 二维图形绘制(1)
第5章 数据可视化——5.2 二维图形绘制(1)
|
数据可视化 C#
第5章 数据可视化——5.2 二维图形绘制(2)
第5章 数据可视化——5.2 二维图形绘制(2)