第一部分探索--第1章 使用ggplot2进行数据可视化

1.1 简介

tidyverse的一个核心R包--ggplot2
首先安装tidyverse
install.packages("tidyverse")
其次要加载tidyverse:
library(tidyverse)
R包只需安装一次,但每次开始新会话时都要重新加载。

1.2 第一步

1.2.1 mpg数据框

数据框:是变量(列)和观测(行)的矩形集合。
mpg:包含了由美国环境保护协会收集的38种车型的观测数据。

mpg

?mpg:了解更多关于mpg的信息,每个变量代表什么。举例:displ: 引擎大小,单位为升;hwy: 汽车在高速公路上行驶时的燃油效率,单位为英里/加仑。效率高耗油少效率低耗油多。

1.2.2 创建ggplot图形

ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))

1.jpeg

提示: displ和hwy之间是负相关=大引擎更耗油
ggplot(data=mpg) 创建一张空白图
函数geom_point()=创建散点图
ggplot2中每个几何对象函数都有一个mapping参数。mapping参数总是与aes()函数成对出现,aes()函数的x参数和y参数分别指定了映射到x轴的变量与映射到y轴的变量。

1.2.3 绘图模板

ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping=aes(<MAPPINGS>))
接下来的部分是展示如何完成并扩展这个模板,以制作出各种类型的图。

1.3 图形属性映射

定义/概念学习
图形属性:是图中对象的可视化属性,其中包括数据点的大小,形状和颜色。
标度变换:ggplot2会自动为每个变量值分配唯一的图形属性水平的这个过程。
aes():将图层中使用的每个图形属性映射集合在一起,然后传递给该图层的映射参数

举例1:将点的颜色映射为变量class,从而揭示每辆汽车的类型
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, color=class))

2

举例2:将无序变量class映射为有序图形属性size:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, size=class))

3

举例3:将变量class映射为不同点透明度:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, alpha=class))
4

举例4:将变量class映射为不同形状:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, shape=class))
5

“gglot2只能同时使用6种形状”

为几何对象设置图形属性,要在函数aes()的外部进行设置,并为这个图形属性选择一个有意义的值
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), color="blue")

6

此时颜色不会传达关于变量的信息,只是改变图的外观。
颜色名称是一个字符串;点的大小毫米表示;点的形状是一个数值。

举例说明:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), shape=24, color="red",fill="white")

7

8

1.4 常见问题

  • 检查是否输入正确的代码
  • “+” 必须放在一行代码的末尾,不是开头
  • 运行?函数名或者选定函数名称后按F1键,可以获得任何R函数的帮助信息
  • 阅读错误消息
  • 搜Google

1.5 分面 (特别适合添加分类变量)

1.5.1 函数facet_wrap()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(~class, nrow=2)

9

1.5.2 函数facet_grid()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(drv ~ cyl)

10

1.6 几何对象

几何对象:图中用来表示数据的几何图形对象。
条形图——条形几何对象
折线图——直线几何对象
箱线图——矩形和直线几何对象
散点图——点几何对象——geom_point
曲线图——平滑曲线几何对象——geom_smooth
ggplot2提供了30多种几何对象,其扩展包甚至提供更多。

举例说明
(一)1条平滑曲线
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy))

11

(二)不同线性不同曲线,每条曲线对应映射到线型的变量的一个唯一值
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy,linetype=drv))
12

(三)同一张图多个几何对象,向ggplot2()函数添加多个几何对象函数:
举例:
同一张图绘制两种几何对象(点+曲线)

ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
geom_smooth(mapping=aes(x=displ,y=hwy))
等于以下代码(上个代码有重复内容)
将一组映射传递给ggplot()函数,ggplot会将这些映射作为全局映射应用到图中的每个几何对象中。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point()+
geom_smooth()
都是下图:
13

如果将映射放在几何对象函数中,ggplot2会将其看作这个图层的局部映射,仅对该图层有效。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth()
14

为不同图层指定不同的数据
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth(data=filter(mpg, class == "subcompact"),se=FALSE)
15

se=standard error, 是否display confidence interval around smooth

1.7 统计变换

定义/概念
统计变换 stat (statistical transformation):绘图时用来计算新数据的算法。
每个几何对象函数都有一个默认统计变换,每个统计变换函数都有一个默认几何对象。

举例详述:
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut))

16

?geom_bar显示出stat的默认值是count:这说明geom_bar()使用stat_count()函数可以进行统计变换
继续往下看,可以发现“computed variables”,它告诉我们stat_count()会计算出两个新变量:count(bin中的点数) 和prop(groupwise proportion 比例)

想要显示使用某种统计变换的3个原因如下:
(1) 想要覆盖默认的统计变换
条形高度已经存在与数据,而不是像前一个图一样,条形高度由对行进行计数来生成:


<- 赋值;tibble:简单数据框,用tidyverse中的tibble包实现。

(2) 想要覆盖从统计变换生成的变量到图形属性的默认映射。
举例: 你或许想要显示一张表示比例而不是计数的条形图
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, y=..prop.., group=1))

17

(3) 在代码中强调统计变换
举例:使用stat_summary()函数将人们的注意力吸引到你计算出的那些摘要统计量上。
ggplot(data=diamonds)+
stat_summary(mapping=aes(x=cut,y=depth),fun.ymin=min,fun.ymax = max, fun.y = median)

18

ggplot2速查表已下载
(https://rstudio.com/resources/cheatsheets/)
示列

1.8 位置调整

(一)为条形图上色
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, color=cut))

19

ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=cut))

20

如果将图形属性映射到另一个变量(如,clarity),那么条形会自动分块堆叠起来。
每个彩色矩形表示cut和clarit的一种组合。
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity))

21

这种堆叠是由position参数设定的位置调整功能自动完成的。

(二)如果不想生成堆叠式条形图,还可以使用以下3种选项之一:"identity", "fill", "dodge"。

  • position = "identity": 将每个对象直接显示在图中。(不太适合条形图,因为重叠)

设置alpha参数为较小的书,可以使得条形略微透明
ggplot(data=diamonds, mapping = aes(x=cut,fill=clarity))+
geom_bar(alpha=1/5, position = "identity")

22

设置fill=NA, 让条形完全透明
ggplot(data=diamonds, mapping = aes(x=cut,color=clarity))+
geom_bar(fill=NA, position = "identity")
23

  • position = "fill": 效果与堆叠相似(每组条形具有同样的高度)
    ggplot(data=diamonds)+
    geom_bar(mapping = aes(x=cut, fill=clarity),position = "fill")
    24

-position = "dodge": 将每组中的条形依次并列放置
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "dodge")

25

(三)散点图的位置调整

  • position = "jitter": 将重叠的点分散开来 = geom_jitter()
    ggplot(data = mpg)+
    geom_point(mapping = aes(x=displ,y=hwy),position="jitter")
    26

1.9 坐标系

- coord_flip()函数:交换x轴和y轴
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()

27

ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()+
coord_flip()
28

- coord_quickmap()函数:为地图设置合适的纵横比,适用于空间数据
未安装Package : map所以不能用数据和示例

书里的图

- coord_polar()函数:极坐标系,揭示条形图和鸡冠花图之间的有趣联系
bar <- ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut,fill=cut),show.legend = FALSE, width = 1)+
theme(aspect.ratio = 1)+
labs(x=NULL, y=NULL)

bar+coord_flip()

29

bar+coord_polar()
30

1.10 图形分层语法

一个正式语法系统(7个参数一同组成了图形语法)

ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping = aes (<MAPPINGS>),stat = <STAT>, position =<POSITION>+
<COORDINATE_FUNCTION>+
<FACET_FUNCTION>

如何从头构建一个基本图形
step1 首先要有一个数据集
step2 通过统计变换将其转换为想要显示的信息
step3 选择一个几何对象来表示转换后的数据中的每个观测值
step4 选择几何对象的图形属性来表示数据中的变量
step5 选择放置几何对象的坐标系
step6 进一步调整几何对象在坐标系中的位置(位置调整),将图划分为多个子图(分面)...

使用这种方法可以构建任何图形。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342