ggplot2_可视化_速成

作者:Li_Yuhui
四川大学研究生在读

本文是R,ggplot2包学习的笔记,总结了大量优秀前辈的工作,对ggplot2进行结构性总结归纳,能够让新手快速上手,事实上,笔者是将其作为字典用的,忘记了,就翻一翻。
看完本文后,如果还是对ggplot2不清楚,欢迎来打脸。

文章目录

ggplot2特点

  • 采用图层的设计方式,有利于结构化思维
  • 将表征数据和图形细节分开,能快速将图形表现出来,使创造性绘图更加容易,而不必纠结于图形的细节,细节可以后期慢慢调整
  • 将常见的统计变换融入到了绘图中
  • 有明确的起始(ggplot开始)与终止(一句话一个图层),图层之间的叠加是靠"+"实现的,越往后,其图层越在上方
  • 图形美观,扩展包丰富,有专门调整字体和公式的包,有专门调整颜色的包,还有专门用按钮辅助调整主题的包,总之,应有尽有

ggplot2基本概念

  • Data数据, Mapping映射
  • Scale标度
  • Geometric几何对象
  • Statistics统计变换
  • Coordinate坐标系统
  • Layer图层
  • Facet分面
  • Legend图例
  • beautiful美化

ggplot2语法框架

在这里插入图片描述
绘图流程:

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

共性映射与个性映射

  • ggplot(data = NULL, mapping = aes())
  • geom_xxx(data = NULL, mapping = aes())
  • ggplot()内有data、mapping两个参数
    具有全局优先级,可以被之后的所有geom_xxx对象或stat_xxx()所继承(前提是geomstat未指定相关参数)
  • geom_xxx()stat_xxx()内的参数属于局部参数,仅仅作用于内部
  • 为了避免混乱,通常将共性映射的参数指定在ggplot(aes())aes内部,将个性映射的参数指定在geom_xxx(aes())stat_xxx(aes())内部

几何对象与统计变换

  • 几何对象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")结果一样

aes与data参数

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

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'))

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

aesthetics 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等文本对象

fill/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
如果对一组颜色进行映射的话,建议使用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")# 查看渐变色板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RColorBrewer使用方法:
通过函数brewer.pal(n, name)抽取色条名字为name的n种颜色,后面还可以用"[]"索引符号索取色块,
一个几何对象设置多种颜色只能在标度中设置,我们会在标度中继续讲解,例:

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

在这里插入图片描述
在这里插入图片描述

lin

  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值