ggplot2图形可视化应用集锦
数据可视化就是将我们从数据中探索的信息与图形要素对应起来的过程。数据可视化,先要理解数据,再去掌握可视化的方法,这样才能实现高效的数据可视化。数据可视化技术的基本思想,是将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。
ggplot2 是最流行的 R 可视化包,ggplot2 基于图层化语法。图形是一层一层的图层叠加而成,先进的绘图理念、优雅的语法代码、美观大方的生成图形,让ggplot2 迅速走红。ggplot2 几乎是 R 语言的代名词。ggplot2将数据、数据到图形要素的映射、以及和数据无关的图形要素绘制分离,可让ggplot2的使用者能清楚分明的感受到一张数据分析图真正的组成部分,有针对性的进行开发,调整。
一、可视化的作用
可视化:可视化将数据以一定的变换和视觉编码原则映射为可视化视图。用户对可视化的感知和理解通过人的视觉通道完成。
可视化编码:可视化编码 (visual encoding) 是可视化的核心内容,是将数据信息映射成可视化元素的技术,其通常具有表达直观、易于理解和记忆等特性。可视编码由两部分组成: 标记和视觉通道。
标记:代表数据属性的分类,通常是一些几何图形元素,例如:点、线、面、体。
视觉通道:表示人眼所能看到的各种元素的属性,包括大小、形状、颜色等,往往用来展示属性的定量信息。
视觉通道有:位置、长度、角度、方向、面积、体积、饱和度、色相、纹理、形状。
RGB 色彩空间:采用笛卡尔坐标系定义颜色,三个轴分别对应红色 (R)、绿色 (G) 和蓝色 (B) 三个分量。 RGB 色彩空间是迄今为止使用最广泛的色彩空间,几乎所有的电子显示设备都使用 RGB色彩空间。
1.1类别比较
1.2 数值关系
1.3 数据分布
1.4 局部与整体
二、ggplot2包
"一张统计图形就是从数据到几何对象(geometric object, 缩写为geom, 包括点、线、条形等)的图形属性(aesthetic attributes, 缩写为aes, 包括颜色、形状、大小等)的一个映射。此外, 图形中还可能包含数据的统计变换(statistical transformation, 缩写为stats), 最后绘制在某个特定的坐标系(coordinate system, 缩写为coord)中, 而分面(facet, 指将绘图窗口划分为若干个子窗口)则可以用来生成数据中不同子集的图形。" ----- Hadley Wickham
函数调用方法
ggplot(data = <DATA>,
mapping = aes(<MAPPINGS>)) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>) +
<SCALE_FUNCTION> +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION> +
<THEME_FUNCTION>
ggplot 的语法包括 10 个部件:数据(data);映射(mapping);几何对象(geom);标度(scale);统计变换(stats);坐标系(coord);位置调整(Position adjustments);分面(facet);主题(theme);输出(output)。10 个部件中,前3个是必须的,其它部件 ggplot2 会自动帮你做好它认为"最优"的配置,当然也都可以手动定制。
ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包,按照其绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的这几个方面【映射(Mapping);几何对象(Geometric);统计变换(Statistics);分面(Facet)】介绍这个强大的R可视化包。
2.1 数据集(data)
这里用于绘制图形的数据,采用经典的mtcars和diamonds数据集为例来画图。
#R包和数据准备
library(ggplot2)
data(diamonds)
data(mtcars)
2.2 映射(Mapping)
映射:aes()函数是ggplot2中的映射函数, 所谓的映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系, 图形的颜色,形状,分组等都可以通过通过数据集中的变量映射。使用diamonds的数据子集作为绘图数据,克拉(carat)数为X轴变量,价格(price)为Y轴变量。
ggplot(diamonds)+geom_histogram(aes(x=price, fill=cut))
注:ggplot2支持图层,可以把不同的图层中共用的映射提供给ggplot函数,而某一几何对象才需要的映射参数提供给geom_xxx函数。
2.3 几何对象(Geometric)
几何对象代表我们在图中实际看到的图形元素,如点、线、多边形等。数据与映射部分介绍了ggplot函数执行各种属性映射,只需要添加不同的几何对象图层,即可绘制出相应的图形,如geom_histogram用于直方图,geom_bar用于画柱状图,geom_boxplot用于画箱式图等。
通过映射和几何对象就可以将数据集中的变量数值变成几何图形以及几何图形的各种图形元素。
注:每一种几何对象所能涉及的aes()类型有区别,在绘制对应对象的时候,要注意选择正确的映射方式,以下仅供参考:
ls("package:ggplot2", pattern="^geom_.+")
[1] "geom_abline" "geom_area" "geom_bar" "geom_bin_2d"
[5] "geom_bin2d" "geom_blank" "geom_boxplot" "geom_col"
[9] "geom_contour" "geom_contour_filled" "geom_count" "geom_crossbar"
[13] "geom_curve" "geom_density" "geom_density_2d" "geom_density_2d_filled"
[17] "geom_density2d" "geom_density2d_filled" "geom_dotplot" "geom_errorbar"
[21] "geom_errorbarh" "geom_freqpoly" "geom_function" "geom_hex"
[25] "geom_histogram" "geom_hline" "geom_jitter" "geom_label"
[29] "geom_line" "geom_linerange" "geom_map" "geom_path"
[33] "geom_point" "geom_pointrange" "geom_polygon" "geom_qq"
[37] "geom_qq_line" "geom_quantile" "geom_raster" "geom_rect"
[41] "geom_ribbon" "geom_rug" "geom_segment" "geom_sf"
[45] "geom_sf_label" "geom_sf_text" "geom_smooth" "geom_spoke"
[49] "geom_step" "geom_text" "geom_tile" "geom_violin"
[53] "geom_vline"
ggplot(diamonds)+geom_bar(aes(x=clarity, fill=cut))
2.4 统计变换(Statistics)
ggplot2提供了多种统计变换方式,此处介绍两种较常用的。
stat_summary
要求数据源的y能够被分组,每组不止一个元素, 或增加一个分组映射,即aes(x= , y = , group = )
library(Hmisc)
g <- ggplot(mtcars,aes(cyl, mpg)) + geom_point()
#mean对mtcars中的列变量进行运算,返回均值
g + stat_summary(fun.y = "mean", color = "red", size = 2)
stat_smooth
对原始数据进行某种统计变换计算,然后在图上表示出来,例如对散点图上加一条回归线。
method 表示指定平滑曲线的统计函数,如lm线性回归, glm广义线性回归, loess多项式回归, gam广义相加模型(mgcv包), rlm稳健回归(MASS包)
ggplot(mpg, aes(displ, hwy)) +geom_point() +stat_smooth(method = lm, se = TRUE)
注:以下为ggplot2提供的其他统计变换方式,也可以自己写函数基于原始数据进行计算。
ls("package:ggplot2", pattern="^stat_.+")
[1] "stat_bin" "stat_bin_2d" "stat_bin_hex" "stat_bin2d"
[5] "stat_binhex" "stat_boxplot" "stat_contour" "stat_contour_filled"
[9] "stat_count" "stat_density" "stat_density_2d" "stat_density_2d_filled"
[13] "stat_density2d" "stat_density2d_filled" "stat_ecdf" "stat_ellipse"
[17] "stat_function" "stat_identity" "stat_qq" "stat_qq_line"
[21] "stat_quantile" "stat_sf" "stat_sf_coordinates" "stat_smooth"
[25] "stat_spoke" "stat_sum" "stat_summary" "stat_summary_2d"
[29] "stat_summary_bin" "stat_summary_hex" "stat_summary2d" "stat_unique"
[33] "stat_ydensity"
2.5 分面(Facet)
分面设置在ggplot2应该也是要经常用到的一项画图内容,在数据对比以及分类显示上有着极为重要的作用。facet_wrap 和 facet_grid是两个经常要用到的分面函数。facet_wrap:基于一个因子进行设置,形式为:变量(单元格)
p<-ggplot(mtcars,aes(mpg,hp))+geom_point()
p+facet_wrap(~cyl)
在上面的这些例子中,我们接触到了ggplot2作图过程中最重要的三个概念:映射、图层和几何对象。aes()函数是ggplot2中的映射函数, 所谓的映射即为数据集中的数据关联到相应的图形属性过程中一种对应关系;ggplot2中图层的概念和PS中图层的概念很像, 可以这样理解ggplot2中的图层:每个图层可以代表一个图形组件, 这些组件以图层的方式叠加在一起构成一个绘图的整体, 在每个图层中的图形组件又可以分别设定数据、映射或其他相关参数, 因此组件之间又是具有相对独立性的。几何对象执行着图层的实际渲染, 控制着生成的图像类型。
三、ggplot2函数概览
四、总结
图层设置是ggplot2做图的关键。通过查看ggplot图形对象的数据结构我们了解到一个图层至少包含几何类型、统计类型和位置调整三方面的东西,当然数据和映射得首先建立。如果把ggplot2当成是太极,这些内容的设置就相当于太极的招式,有固定方法;对招式理解透彻后以随意对它们进行组合,并融合数据层面的一些设置(如分面、美学属性映射等)创造出用于解决问题的完美图形。刚开始接触学习ggplot2的时候,其实是非常抵触,觉得非常非常难的,但随着一张张图片跃然于屏幕之上,心中的抵触满满消失,取而代之的甚至多出了一丝喜爱。而这丝喜爱愈酿愈醇厚,愈酿愈香甜。希望大家能够爱上R这门编程语言,享受使用ggplot2绘图的乐趣。
参考文献
1.(R语言学习ggplot2绘制统计图形包全面详解)[https://www.jb51.net/article/227443.htm]
2.(R语言可视化及作图5--ggplot2基本要素、几何对象和数据转换函数汇总)[https://www.jianshu.com/p/fe83dfe15718]
3.(50个ggplot2可视化案例)[https://blog.csdn.net/qazplm12_3/article/details/109760060]
4.R语言可视化【ggplot2】