Quantcast
Channel: CodeSection,代码区,网络安全 - CodeSec
Viewing all articles
Browse latest Browse all 12749

R_ggplot2基础(一)

0
0

作者: 李誉辉

四川大学在读研究生

1 ggplot2特点

采用 图层 的设计方式,有利于结构化思维

将表征数据和图形细节分开,能快速将图形表现出来,使创造性绘图更加容易,而不必纠结于图形的细节,细节可以后期慢慢调整

将常见的统计变换融入到了绘图中

有明确的起始(ggplot开始)与终止(一句话一个图层),图层之间的叠加是靠“+”实现的,越往后,其图层越在上方

图形美观,扩展包丰富,有专门调整字体和公式的包,有专门调整颜色的包,还有专门用按钮辅助调整主题的包,总之,应有尽有

2ggplot2基本概念

Data数据, Mapping映射

Scale标度

Geometric几何对象

Statistics统计变换

Coordinate坐标系统

Layer图层

Facet分面

Legend图例

beautiful美化

3ggplot2语法框架
R_ggplot2基础(一)
绘图流程: ggplot(data, aes(x = , y = )) + # 基础图层,不出现任何图形元素, geom_xxx()|stat_xxx() + # 几何图层或统计变换,出现图形元素 coord_xxx() + # 坐标变换,默认笛卡尔坐标系 scale_xxx() + # 标度调整,调整具体的标度 facet_xxx() + # 分面,将其中一个变量进行分面变换 guides() + # 图例调整 theme() # 主题系统

3.1共性映射与个性映射

ggplot(data = NULL, mapping = aes())

geom_xxx(data = NULL, mapping = aes())

ggplot() 内有data、mapping两个参数

具有全局优先级,可以被之后的所有 geom_xxx 对象或 stat_xxx() 所继承(前提是 geom 或 stat 未指定相关参数)

而 geom_xxx() 或 stat_xxx() 内的参数属于局部参数,仅仅作用于内部

为了避免混乱,通常将共性映射的参数指定在 ggplot(aes()) aes内部,将个性映射的参数指定在 geom_xxx(aes()) 或 stat_xxx(aes()) 内部

3.2几何对象与统计变换

几何对象 geom_xxx(stat = ) 内有统计变换参数 stat ,统计变换 stat_xxx(geom = ) 内也有几何对象参数 geom

两种方法结果相同,几何对象更专注于结果,统计变换更专注于变换过程

library(ggplot2) # 用几何对象作图 ggplot(data = NULL, mapping = aes(x = x, y = y)) + geom_point(color = "darked", stat = "identity") # identity 表示没有任何统计变换 # 用统计变换作图 ggplot(data = NULL, mapping = aes(x = x, y = y)) + stat_identity(color = "darked", geom = "point") # geom_point(stat = 'identity')与stat_identity(geom = 'point')结果一样

3.3aes与data参数

aes参数用来指定要映射的变量,可以是多个变量,

data参数表示指定数据源,必须是data.frame格式,其坐标轴变量最好宽转长,只能指定一个x轴和y轴,多个x列或y列不能使用调整图例。

4 geom_xxx() 几何对象

常用的几种几何对象函数:

几何对象函数描述其它

geom_point点图geom_point(position = "jitter")==geom_jitter()避免重叠

geom_line折线图可以通过smooth参数平滑处理

geom_bar柱形图x轴是离散变量

geom_area面积图

geom_histogram直方图x轴数据是连续的

geom_boxplot箱线图

geom_rect二维长方形图

geom_segment线段图

geom_path几何路径由一组点按顺序连接

geom_curve曲线

geom_abline斜线有斜率和截距指定

geom_hline水平线常用于坐标轴绘制

geom_vline竖线常用于坐标轴绘制

geom_text文本

ggplot2唯一不支持的常规平面图形是 雷达图

其它几何对象查询:

ggplot2 part of the tidyverse

ggplot2 Quick Reference: geom

也可以用

ls(pattern = '^geom_', env = as.environment('package:ggplot2')) 查询,但是没有图形示例

library(ggplot2) ls(pattern = "^geom_", env = as.environment("package:ggplot2"))

柱形图和散点图是关键,并且与极坐标变换紧密相连,着重介绍柱形图和散点图,其它的原理和参数都类似

4.1aesthetics specifications 美学参数

能用作变量 映射 的包括:

美学参数描述

color/col/colour指定点、线和填充区域边界的颜色

fill指定填充区域的颜色,如条形和密度区域, 第21到24号点也有填充色

alpha指定颜色的透明度,从0(完全透明) 到 1(不透明)

size指定点的尺寸或线的宽度,单位为mm

angle角度,只有部分几何对象有,如geom_text文本的摆放角度, geom_spoke中短棒摆放角度

linetype指定线条的类型

shape点的形状, 为[0, 25]区间的26个整数

vjust垂直位置微调,在(0, 1)区间的数字或位置字符串: 0=“buttom”, 0.5=“middle”, 1=“top” , 区间外的数字微调比例控制不均

hjust水平位置微调,在(0, 1)区间的数字或位置字符串:0=“left”, 0.5=“center”, 1=“right” , 区间外的数字微调比例控制不均

不常映射的参数描述

binwidth直方图的宽度

notch表示方块图是否应为缺口

sides表示地毯图的安置位置(“b”底部, “l”左部, “t”顶部, “r”右部, “bl”左下角, 等等)

width箱线图或柱形图的宽度,从(0, 1), 柱形图默认0.9即90%

lineend表示指定宽线条端部形状,有3种:“round”半圆形,“square”增加方形, “butt”默认不变, 常用于geom_path和geom_line几何对象

family字体(Font face),内置的只有3种:“sans”, “serif”, “mono”

fontface字型,分为: “plain”常规体, “bold”粗体, “italic”斜体, “bold.italic”粗斜体。常用于geom_text等文本对象

lineheight长文本换行行距, 常用于geom_text等文本对象

4.1.1fill/color 颜色

R自身自持很多种方式的颜色,“颜色名称”和“HEX色值”最常用和方便,其它的需要扩展包

颜色名称如:

“white”, “azure”, “bisque”, “blue”, “black”, “brown”, “chacolate”, “coral”, “cornsilk”, “cyan”, “gold” ,

“darkgolden”, “orange”, “orchild”, “gray”, “grey”, “tomato”, “violet”, “wheat”, “yellow”, “pink”,

“purple”, “red”, “salmon”, “seashell”, “ivory”,“magentia”,“navy”等系列。

所有的颜色名称见: R_Color_Chart (后台回复: 颜色 ,可下载PDF版本)

如果对一组颜色进行映射的话,建议使用RColorBrewer等调色包,更加方便

RColorBrewer颜色板如下,左边为字符串编号,上下分为3个版块,分别为渐变色板Sequential,离散对比色板Qualitative,两极色板Diverging

# colors() # 调用所有内置颜色编号,名称 scales::show_col(colors()[1:6]) # show_col函数可以将颜色名称或HEX色值向量显示出来 # RColorBrewer包使用 library("RColorBrewer") display.brewer.all() # 显示所有可用色板 display.brewer.all(type = "seq") # 查看渐变色板
R_ggplot2基础(一)
R_ggplot2基础(一)
R_ggplot2基础(一)

RColorBrewer使用方法:

通过函数 brewer.pal(n, name) 抽取色条名字为name的n种颜色,后面还可以用“[]”索引符号索取色块,

一个几何对象设置多种颜色只能在标度中设置,我们会在标度中继续讲解,例:

library("RColorBrewer") display.brewer.pal(7, "PuRd") # 抽取PuRd色条7种颜色,其颜色色值范围没有变,只是色值间隔增大了 display.brewer.pal(9, "PuRd")[11] # 抽取PuRd色条11种颜色,其颜色色值范围没有变,指定色值间隔减小了
R_ggplot2基础(一)

4.1.2linetype 线型

线条形状通过名称或整数指定:

线型描述

0=“blank”白线

1=“solid”实线

2=“dashed”短虚线

3=“dotted”点线

4=“dotdash”点横线

5=“longdash”长虚线

6=“twodash”短长虚线

自定义线型

通过1个十六进制的字符串来自定义,字符串长度为2、4、6或8。

第1个数字为代表闭合的长度,第2个数字代表缺口的长度,第3个数字又是闭合的长度,第4个数字是缺口的长度,如此交替排列。 然后作为一个整体重复排列

如:

* 字符串“33”代表开始3个单位长度闭合,产生短横线,然后缺口长度也是3个单位,这样作为一个整体进行重复排列

* 字符串“81”代表开始8个单位长度闭合,产生较长的横线,然后缺口长度为1个单位,这样作为一个整体重复排列

* 字符串“f8”表示开始16个单位长度闭合,产生长横线,然后缺口长度为8个单位,这样作为一个整体重复排列

* 字符串“357a”表示开始3个单位长度闭合,产生短横线,然后缺口5个单位,然后闭合7个单位,最后缺口11个单位,这样整体重复排列

如图所示:

library(ggplot2) lty <- c("solid", "dashed", "dotted", "dotdash", "longdash", "twodash") linetypes <- data.frame( y = seq_along(lty), # seq_along表示生成与对象同样长度的序列 lty = lty ) ggplot(linetypes, aes(0, y)) + geom_segment(aes(xend = 5, yend = y, linetype = lty)) + # 将一个变量映射到线型 scale_linetype_identity() + geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) + scale_x_continuous(NULL, breaks = NULL) + scale_y_reverse(NULL, breaks = NULL) # 自定义线型 lty <- c("33", "18", "81", "f8", "5f", "357a", "5a73", "342167", "a23f45b6") # 自定义9种线型

Viewing all articles
Browse latest Browse all 12749