数据可视化就是将我们从数据中探索的信息与图形要素对应起来的过程。数据可视化,先要理解数据,再去掌握可视化的方法,这样才能实现高效的数据可视化。数据可视化技术的基本思想,是将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。

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】

ggplot2图形可视化应用集锦的更多相关文章

  1. E-Form++图形可视化源码库新增同BCGSoft的Ribbon结合示例

    2015年11月20日,来自UCanCode E-Form++源码库的开发团队消息,E-Form++正式提供了同BCGSoft的Ribbon界面风格相结合的示例,如下图: 下载此示例请访问: http ...

  2. WHY数学图形可视化工具(开源)

    WHY数学图形可视化工具 软件下载地址:http://files.cnblogs.com/WhyEngine/WhyMathGraph.zip 源码下载地址: http://pan.baidu.com ...

  3. Cloudcraft: 云架构图形可视化(智能AWS图表)

    Cloudcraft: 云架构图形可视化(智能AWS图表) 2016.09.11 官方网站: https://cloudcraft.co/ Cloudcraft是一个Web应用,用图形表示各种AWS服 ...

  4. 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件

    参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...

  5. R:ggplot2数据可视化——进阶(1)

    ,分为三个部分,此篇为Part1,推荐学习一些基础知识后阅读~ Part 1: Introduction to ggplot2, 覆盖构建简单图表并进行修饰的基础知识 Part 2: Customiz ...

  6. R:ggplot2数据可视化——进阶(3)

    Part 3: Top 50 ggplot2 Visualizations - The Master List, 结合进阶1.2内容构建图形 有效的图形是: 不扭曲事实 传递正确的信息 简洁优雅 美观 ...

  7. R:ggplot2数据可视化——基础知识

    1 安装 # 获取ggplot2 最容易的就是下载整个tidyverse: install.packages("tidyverse") # 也可以选择只下载ggplot2: ins ...

  8. R:ggplot2数据可视化——进阶(2)

    Part 2: Customizing the Look and Feel, 更高级的自定义化,比如说操作图例.注记.多图布局等  # Setup options(scipen=999) librar ...

  9. R语言与医学统计图形-【27】ggplot2图形组合、字体、保存

    ggplot2绘图系统--图形组合.字体选择.保存输出 1.图形组合 一页多图在基础包中利用par和layout函数来切分画布. ggplot2是先铺好网格背景,再进行绘图,所以要通过切分网格背景来实 ...

  10. R语言与医学统计图形-【10】ggplot2图形映射

    ggplot2绘图系统--图形映射 颜色的映射. #aes中映射变量 ggplot()+geom_point(aes(x=carat,y=price,color='blue'),#color视为单一变 ...

随机推荐

  1. https://计算机等级分类总结

    4个等级: 一级:定位为满足人们在一般性工作中对计算机的应用,重点是操作能力的考核: 二级:定位为计算机程序员,可谓"计算机蓝领". 三级:定位为"开发工程师" ...

  2. MyBatis-Plus数据源失效找不到

    记一次项目排查问题项目应用了MyBatis-Plus多数据源配置但是在执行定时任务时发现没达到想要的结果于是查询日志分析问题最终发现问题所在多数据源注解会合事务注解冲突导致失效@DS("&q ...

  3. .NetCore中配置Ef

    1.在NuGet中下载 Microsoft.EntityFrameworkCore.Tools Microsoft.EntityFrameworkCore.SqlServer 2.需要在Api层.实现 ...

  4. CC2020 分享信息

    CC2020是鄙人第一次参与的国际计算教育报告.CC2020报告的特色是希望面向未来的教育能走近每一个教育的利益相关者,包括家长.学生.行业雇主.政府决策制定者和学术界人士.敬请各位从自己的身份角度对 ...

  5. 库已安装但找不到ttkbootstrap库

    cmd里装,弹提示Requirement already satisfied pip install --target=F:\Python37\lib ttkbootstrap https://blo ...

  6. linux安装mongo-c-driver

    yum install mongo-c-driver sudo yum install cmake openssl-devel cyrus-sasl-devel $ wget https://gith ...

  7. 小白开始成长了+洛谷1488与CF629A Far Relative’s Birthday Cake题解

    终于开始我的博客生活了,希望博客可以让我记住学了什么,错了什么,接下来会有什么将出现. 记录写ACM生涯中的一些经验和网工经验吧,如果有人看我博客的话,希望可以留言给我提提意见,指导指导我啦~~~ 正 ...

  8. CATIA的后处理

    同其他的cam软件一样,catia可以使用配置好的后处理文件输出相应的G代码文件, 也可以输出相应的刀位文件. 下图中的1选择的是后处理文件:下图2种设置的是输出刀位文件的格式. 输出G代码: 选择[ ...

  9. idea安装阿里规范审查插件

    Install from repositories Settings >> Plugins >> Browse repositories... Search plugin by ...

  10. C 系列的暂停

    由于Mooc上有关C 的课程并不是很全面,网络上有关于C 的消息过于杂糅,所以暂时停止C的学习,重启时间暂定,等什么时候需要的时候再做重启.