关于ggplot2包的应用。
数据结构、绘图对象、图层、标度变换、分面、坐标系、主题;
数据结构
一个图形对象,由5部分组成
- 数据(数据框格式) + 图形属性映射
- 封箱:将数据分为子集的形式;默认为bins=30
- 一个/多个图层;图层:一个图层必须由4部分组成
- 一种位置调整方式
- 数据和图形属性映射
- 一种统计变换
- 一种几何对象
- 标度;每个图形属性映射都对应一个标度
- 一个坐标系统
- 分面设定
1. 绘图对象(数据+图形属性[aes])
|
|
- why :将数据变量映射到图形中;即指定每个变量扮演的角色
可以使用变量的函数值作为参数;eg: aes(sqtr(age))
aes - aesthetics
数据
- 必须是数据框(data.frame)
- ggplot2从给定的数据框中提取所需的变量,并生成一个新的数据集,而不是直接在原数据集上进行数据表换;
- 数据是以副本而不是引用的形式存储到图形对象的
如果你的数据改变了,绘图不会改变
可以被存储save()到磁盘上,并可被直接加载运行load()
- 替换数据集( %+% );
- 用相同的代码,对不同的数据集绘图
|
|
图形属性-aes
- what :大小、颜色、形状、透明度;
- 每个图形属性还可以映射为一个变量或设定为一个常数
- 每一个图形属性都对应一个称为标度的函数,作用是将数据的取值映射到该图形属性的有效取值
属性 | 描述 |
---|---|
shape | 点的形状 |
fill | 填充区域 |
color | 区域的边界;点、线的颜色 |
linetype | 线条类型 |
size | 点的大小;线的宽度 |
alpha | 颜色透明度; |
label | 标签;rowname(data) |
group |
alpha
若想采用同一色度,则加上alpha=var
分组
- 分组变量必须是因子变量;
- 离散型变量的交互作用被设为分组的默认值
group=factor(var) / fill=factor(col)
- 多个分组 + 单个图形属性 - ggplot()函数
- [what] - 将数据分成若干组,并用相同的方式对每个组进行渲染
|
|
- 不同图层 + 不同分组 - geom(aes())函数
- [what] - 不同水平下的数据整合来对统计汇总信息进行绘图;
- 不同的图层可能有不同的分组图形属性
- group=1 ,表示选择所有数据
|
|
- 修改默认分组 - geom(aes())函数
- [what] - 自定义离散型变量中的默认分组
- [how] - 在几何对象中进行修改
|
|
2. 图层(几何对象)
- what: 每一个几何对象都对应着一个默认的统计变换和位置参数 (geometric object)
- 具体形式为点、线、条;
- why :决定了图形的类型
- how :个体/群组几何对象; / 分组group
设定与映射
设定:p + geom_point(colour=”darkblue”) (其中p <- ggplot(mtcars, aes(x=mpg, y=wt)))
行为:图层里colour参数设定了点的颜色
映射:p + geom_point(aes(colour=”darkblue”))
行为:先创建一个只含有”darkblue”的变量,然后将colour映射到这个新变量;因为这个变量是离散型的,默认的颜色标度用色轮上等间距的颜色,并且此处只有一个值,因此这个颜色就是桃红色
设定
【设定】图形属性为一个单一值 - 几何对象中的参数
- what:用于设定图层的图形;
- 设定:几何对象中的参数
- how :具体组成
属性 | 描述 |
---|---|
shape | 点的形状 |
fill | 填充区域 |
color | 区域的边界;点、线的颜色 |
linetype | 线条类型 |
size | 点的大小;线的宽度 |
alpha | 颜色透明度;[0~1] |
position | 位置 |
binwidth | 直方图宽度geom_histogram [0,1] |
width | 箱线图宽度geom_boxplot [0,1] |
side | 地毯图geom_rug的位置; |
notch=T/F | 方块图是否为缺口 |
position
对图层中元素的位置进行微调;
常用于离散型数据;[连续型数据很少出现完全重叠的现象]
映射
【映射】到一个变量:修改绘图对象的图形属性
- why :因为图绘图对象可以单独保存,所以才有修改的这个作用
- how :在几何对象中进行修改
- 绘图对象 - ggplot(mtcars, aes(mpg, wt))
|
|
3. 图层(统计变换+位置调整)
统计变化 - stat_xx
what:以某种方式对数据进行统计汇总;必须是一个位置尺度不变的量
- 任何一个ggplot2图层都包括stat和geom两部分,或者说两个步骤
“每一个几何对象都有一个默认的统计变换,并且每一个统计变换也都有一个默认的几何对象”。
1234x <- c(rnorm(100,14,5),rep(20,20))y <- c(rnorm(100,14,5) + rnorm(100,0,1),rep(20,20))ggplot(data= NULL, aes(x = x, y = y)) + geom_point(color = "darkred",stat = "sum") 等同于ggplot(data= NULL, aes(x = x, y = y)) + stat_sum(color = "darkred",geom = "point")可在几何对象中修改统计变换;
|
|
- 可在统计变换中修改集合对象;
|
|
why :将返回的数据集作为输出,并可在图形中展现;故可向原数据集中插入新的变量
- 当我们需要展示出某个变量的某种统计特征的时候,需要用到统计变换
how :生成变量的名字必须用点号围起来 (..xx..)
4. 标度变换(scale)
what:控制数据到图形属性的映射;将数据单位(升、英里加仑数)转换为电脑可以识别的物理单位(像素和颜色)的过程
- 定义域(数据空间)
- 值域(图形属性空间)
- 将定义域映射的值域; 变换-训练-映射
why :将数据转化为视觉可以感知的东西:大小、颜色、位置;提供读图时使用的工具:坐标轴+图例
how :用法 - scale_图形属性名称_标度名称 ( scale_x_discrete() )
- 可修改的标度,以适应变量类型与标度类型;(当修改底层数据或图形属性映射后)
12p <- ggplot(mpg, aes(cty,hwy))p + geom_point(aes(x=drv)) + scale_x_discrete()图形属性:scale_colour / fill / x / y / shape / linetype / size
scale_xxx_yyy
的具体形式
xxx | Description |
---|---|
colour | Color of lines and points |
fill | Color of area fills (e.g. bar graph) |
linetype | Solid/dashed/dotted lines |
shape | Shape of points |
size | Size of points |
alpha | Opacity/transparency |
yyy | Description |
---|---|
hue | Equally-spaced colors from the color wheel |
manual | Manually-specified values (e.g., colors, point shapes, line types) |
gradient | Color gradient |
grey | Shades of grey |
discrete | Discrete values (e.g., colors, point shapes, line types, point sizes) |
continuous | Continuous values (e.g., alpha, colors, point sizes) |
位置标度 - 坐标轴
坐标轴标签名称
|
|
坐标轴刻度范围
- 固定标度的定义域
- expand_limits():通过指定的值,使其包含在刻度值中
expand_limits(x=0, y=0)
|
|
对条形图、直方图不可用xlim(),因为会删除其不再范围内的变量;应改用coord_cartesion(xlim=c(,) )
刻度值的分段显示 + 转换
|
|
刻度值的变换
- 在统计计量之前,不会改变几何形状
|
|
颜色标度
- 显示的颜色,前提是已经设置的颜色属性;scalecolor / scalefill
|
|
.png)
离散型的手动标度
|
|
图例标度 - guides
- guides为每一个scale_by_scale的函数来设置参数
|
|
|
|
5. 分面(facet)
- what: 将数据划分为多个子集,并依次绘图
- 适用于离散型变量(若对连续型变量则需要先将其转换)
|
|
- why :用于比较不同分组之间的情况;(理解为aes中gruop的不同变体;)
- 分组:容易发现各组之间细微的差别
- 分面:对于各组之间重叠问题严重时,可很好地解决该问题
- how : + facet_grid / wrap
网格型
what :二维面板,由行和列通过变量来定义;
why :用于两个或多个变量来生成一个2维网格
how :需要设定哪些变量作为分面绘图的行与列;
多种形式 - facet_grid()
|
|
网格型 - 分面位置占比 - space=”fixed”/ “free”(随标度范围变化而变化)
封装型
- what:一维面板条,再封装到二维中
- why :处理单个多水平变量
- 多种形式 - facet_wrap()
|
|
封装型 - 标度控制
|
|
分面的标签控制
|
|
6. 坐标系(coord)
- what:将两种位置标度结合在一起组成的二维定位系统
- how :笛卡尔坐标系、非笛卡尔坐标系
笛卡尔坐标 - cartesian()
|
|
非笛卡尔坐标
|
|
7. 主题(theme)
- what:对数据之外的图形外观进行控制;
- how :设置与使用
- 使用方式:+theme(主题元素 = 主题性质)
+ theme(plot.title=element_text(size=20))
主题与设置
|
|
–
|
|
–
|
|
边界
|
|
主题元素+元素函数
主题元素
|
|
–
|
|
–
|
|
–
|
|
–
|
|
元素函数
|
|
–
|
|
–
|
|
–
|
|
一页多图
组图
|
|
子图 - viewport()+print
|
|
属性参考
几何对象 - 点 - geom_xx
|
|
point - 散点图
几何对象 - 线
|
|
几何对象 - 面
bar - 条形图
- 先做出x/y轴,再作图,运用stat
- ggplot(temp3, aes(content_rating, M))
- last_plot() + geom_bar(stat=”identity”)
|
|
histogram - 直方图
|
|
其他面图
|
|
几何对象 - 非常规图形
漏斗图
|
|
|
|
–
其他图形
|
|
–
|
|
text - 文本注释
|
|
aes(label=rownames(var)) 可在任何几何对象中出现
geom_point(aes(laber=rownames(var)))
图形属性
linetype
符号 | 描述 |
---|---|
1 | solid - 实线 |
2 | dashed - 虚线 |
3 | dotted - 点 |
4 | dotdash - 破折号 |
5 | longdash - 长破折号 |
6 | twodash - 双破折号 |
position
符号 | 描述 | 示例 |
---|---|---|
stack | 堆叠 | 堆砌条形图 |
fill | 堆叠并高度标准化为1 | 百分比堆砌条形图 |
dodge | 避免重叠,并排放置 | 分组条形图 |
jitter | 给点添加扰动,避免重叠 | |
identity | 不做任何调整 |
identity ,不适合条形图,因为后面画的条形会挡住先画的
side
地毯图geom_rug的位置;
符号 | 描述 |
---|---|
b | 底部 |
l | 左侧 |
r | 右侧 |
t | 顶部 |
bl | 左下 |
“tl” 、 “tr”、”br” | 左上、右上、右下 |
shape
fontface
|
|
统计变换
常用统计变换
统计变换 | 描述 |
---|---|
stat_identity | 不做任何统计变换 |
stat_boxplot | 计算组成箱线图的各种元素值 |
stat_density | 一维密度估计 |
stat_density2d | 二维密度估计 |
stat_smooth | 添加拟合曲线 |
stat_summary | 对每个x所对应的y值做统计描述 |
stat_unique | 删除重复值 |
stat_bin | count - 直方图 |
density - 频率多边形图 | |
|
|
统计变换 stat_xx
统计变换 | 描述 |
---|---|
stat_bin | 计算封箱(bin)数据 |
bin2d | 计算封箱内的观测值个数 |
bindot | 计算“点直方图”封箱数据 |
binhex | 计算“六边形热图”封箱数据 |
boxplot | 计算组成箱线图的各种元素值 |
contour | 三维数据的等高线 |
density | 一维密度估计 |
density2d | 二维密度估计 |
function | 添加新的函数 |
identity | 不对数据进行统计变换 |
计算qq图的相关值 | |
quantile | 计算连续的分位数 |
smooth | 添加光滑曲线 |
spoke | 将角度和半径转换成xend和yend |
sum | 计算每个单一值的频数[有助于解决散点图的图形重叠问题] |
summary | 对每个x对应的y值做统计描述 |
summary2d | 对二维矩形封箱设定函数 |
summaryhex | 对二维六边形封箱设定函数 |
unique | 删除重复值 |
ydensity | 小提琴图,计算一维y轴方向的核密度函数的估计值 |
作图规范
标准作图规范
|
|
可对图形分别进行设定与修改 - 基础图形可被保存
|
|
–
|
|
作图问题
图形基本处理
- 矢量图形(PDF, PostScript, SVG,AI,)
- 位图(PNG, JPEG, TIFF,bmp,jpg)
|
|
图片保存
21.5寸显示频:1920px $\times$ 1080px (比值 = 1.7777)
电脑显示频 -16:9 (比值 = 1.777)
电脑显示频 - 4:3 (比值 = 1.333)
savePlot 的妙用(在R中的使用,非Rstudio)
|
|
粘贴复制(rstudio)
|
|
导出高清的图
|
|
图片不清晰
R中生成的图片,保存为.tiff格式,有3M,在word里还是模糊
- 一般情况下,如果需要在word中插入图片,分为两种方法:复制黏贴与插入图片菜单。同时,由于word文档往往为表述性质使用,因此并不需要分辨率很高的图片,像我个人使用都是800*600的jpg格式,单张图片尺寸保持在100k~200k之间刚好。然后如果插入图片较多,往往会造成word文档尺寸较大,不便于使用MMS工具传输,所以会使用wrod中的图片处理工具压缩文档中的所有图片。
- 关于图片模糊,事实上在给定显示设备参数不变的状态下会有两种情况,一种是图片分辨率太低,还有一种是图片分辨率太高。解决方法是根据你最终输出的需求(出版物,电子文档等)来调整相应输出设备分辨率参数,并把其作为模版保存下来即可
为图形添加注释 - annotate
|
|
项目排序顺序
|
|
遮盖问题
- 图形相互覆盖无法看清
|
|
含权重数据
点/线 - size = 权重变量
复杂情况 - weight = 权重变量
交互式作图 - ggplotly
|
|
统计摘要:为统计量绘图
|
|