ggplot2高效实用指南(可视化脚本、工具、套路、配色)

您所在的位置:网站首页 图形轮廓的设置与填充 ggplot2高效实用指南(可视化脚本、工具、套路、配色)

ggplot2高效实用指南(可视化脚本、工具、套路、配色)

2023-06-01 00:57| 来源: 网络整理| 查看: 265

作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源

编者按:

数据可视化

是解析、理解和展示数据不可缺少的一部分。炫或不炫看个人喜好和功底,能否达意是最基本的要求---最合适的图示和配色表达最直观的含义。长文多图预警,这是关于ggplot2使用的极详细教程(190+图),是入门和晋级参考的不二手册。

前面部分是关于qplot的使用,后面是

ggplot2

图层的使用。原文使用R自带数据集,后面有生信宝典出品的针对生信常见作图的ggplot2使用教程。为完善之际,本文整理了关于可视化套路 (什么图适合做什么), 图形配色 (美观不突兀)和多种在线、本地、编程和界面类绘图工具和脚本供集中学习和收藏使用。

简介

ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象):

data: 数据集,主要是data frame;

Aesthetics: 美学映射,比如将变量映射给x,y坐标轴,或者映射给颜色、大小、形状等图形属性;

Geometry: 几何对象,比如柱形图、直方图、散点图、线图、密度图等。

在ggplot2中有两个主要绘图函数:qplot()以及ggplot()。

qplot(): 顾名思义,快速绘图;

ggplot():此函数才是ggplot2的精髓,远比qplot()强大,可以一步步绘制十分复杂的图形。

由ggplot2绘制出来的ggplot图可以作为一个变量,然后由print()显示出来。

图形类型

根据数据集,ggplot2提供不同的方法绘制图形,主要是为下面几类数据类型提供绘图方法:

一个变量x: 连续或离散

两个变量x&y:连续和(或)离散

连续双变量分布x&y: 都是连续

误差棒

地图

三变量

安装及加载

安装ggplot2提供三种方式:

加载

数据准备

数据集应该数据框data.frame

本文将使用数据集mtcars。

qplot()

其中:

x,y: 根据需要绘制的图形使用;

data:数据集;

geom:几何图形,变量x,y同时指定的话默认为散点图,只指定x的话默认为直方图。

散点图

也可以添加平滑曲线

还有其他参数可以修改,比如点的形状、大小、颜色等

箱线图、小提琴图、点图

箱线图

小提琴图

点图

直方图、密度图

直方图

密度图

ggplot()

上文中的qplot()绘制散点图:

在ggplot()中完全可以如下实现:

改变点形状、大小、颜色等属性

绘图过程中常常要用到转换(transformation),这时添加图层的另一个方法是用stat_*()函数。

下例中的geom_density()与stat_density()是等价的

等价于

对于每一种几何图形。ggplot2 基本都提供了 geom()和 stat()

一个变量:连续型

使用数据集wdata,先计算出不同性别的体重平均值

先绘制一个图层a,后面逐步添加图层

可能添加的图层有:

对于一个连续变量:

面积图geom_area()

密度图geom_density()

点图geom_dotplot()

频率多边图geom_freqpoly()

直方图geom_histogram()

经验累积密度图stat_ecdf()

QQ图stat_qq()

对于一个离散变量:

条形图geom_bar()

面积图

改变颜色

注意:y轴默认为变量weight的数量即count,如果y轴要显示密度,可用以下代码:

可以通过修改不同属性如透明度、填充颜色、大小、线型等自定义图形:

密度图

使用以下函数:

geom_density():绘制密度图

geom_vline():添加竖直线

scale_color_manual():手动修改颜色

根据sex修改颜色,将sex映射给line颜色

修改填充颜色以及透明度

添加均值线以及手动修改颜色

点图

将sex映射给颜色

手动修改颜色

频率多边图

y轴显示为密度

修改颜色以及线型

直方图

将sex映射给线颜色

经验累积密度图

QQ图

一个离散变量

修改填充颜色

两个变量:x,y皆连续

使用数据集mtcars, 先创建一个ggplot图层

可能添加的图层有:

geom_point():散点图

geom_smooth():平滑线

geom_quantile():分位线

geom_rug():边际地毯线

geom_jitter():避免重叠

geom_text():添加文本注释

散点图

将变量cyl映射给点的颜色和形状

自定义颜色

平滑线

可以添加回归曲线

散点图+回归线

使用loess方法

将变量映射给颜色和形状

分位线

边际地毯线

使用数据集faithful

避免重叠

实际上是的简称,下面使用数据集mpg

增加抖动防止重叠

其中两个参数:

width:x轴方向的抖动幅度

height:y轴方向的抖动幅度

文本注释

参数label用来指定注释标签 (ggrepel可以避免标签重叠)

两个变量:连续二元分布

使用数据集diamonds

创建ggplot图层,后面再逐步添加图层

可添加的图层有:

geom_bin2d(): 二维封箱热图

geom_hex(): 六边形封箱图

geom_density_2d(): 二维等高线密度图

二维封箱热图

将点的数量用矩形封装起来,通过颜色深浅来反映点密度

设置bin的数量

六边形封箱图

geom_hex()依赖于另一个R包hexbin,所以没安装的先安装:

修改bin的数目

二维等高线密度图

两个变量:连续函数

主要是如何通过线来连接两个变量,使用数据集economics。

先创建一个ggplot图层,后面逐步添加图层

可添加的图层有:

geom_area():面积图

geom_line():折线图

geom_step(): 阶梯图

面积图

线图

阶梯图

两个变量:x离散,y连续

使用数据集ToothGrowth,其中的变量len(Tooth length)是连续变量,dose是离散变量。

创建图层

可添加的图层有:

geom_boxplot(): 箱线图

geom_violin():小提琴图

geom_dotplot():点图

geom_jitter(): 带状图

geom_line(): 线图

geom_bar(): 条形图

箱线图

添加有缺口的箱线图

按dose分组映射给颜色

将dose映射给填充颜色

按supp进行分类并映射给填充颜色

小提琴图

添加中值点

与箱线图结合

将dose映射给颜色进行分组

点图

添加中值点

与箱线图结合

添加小提琴图

将dose映射给颜色以及填充色

带状图

带状图是一种一维散点图,当样本量很小时,与箱线图相当

添加中值点

与点图结合

与小提琴图结合

将dose映射给颜色和形状

线图

将supp映射线型

修改线型、点的形状以及颜色

条形图

创建图层

修改填充色以及添加标签

将dose映射给条形图颜色

修改填充色

将变量supp映射给填充色,从而达到分组效果

修改position为dodge

两个变量:x、y皆离散

使用数据集diamonds中的两个离散变量color以及cut

两个变量:绘制误差图

绘制误差图需要知道均值以及标准误,下面这个函数用来计算每组的均值以及标准误。

计算均值以及标准误

创建图层

可添加的图层有:

geom_crossbar(): 空心柱,上中下三线分别代表ymax、mean、ymin

geom_errorbar(): 误差棒

geom_errorbarh(): 水平误差棒

geom_linerange():竖直误差线

geom_pointrange():中间为一点的误差线

具体如下:

geom_crossbar()

将dose映射给颜色

自定义颜色

修改填充色

通过将supp映射给颜色实现分组,可以利用函数stat_summary()来计算mean和sd

误差棒

将dose映射给颜色

与线图结合

与条形图结合,并将变量dose映射给颜色

水平误差棒

创建图层

参数xmin与xmax用来设置水平误差棒

通过映射实现分组

geom_linerange()与geom_pointrange()

line range

point range

点图+误差棒

添加geom_crossbar()

添加geom_errorbar()

添加geom_pointrange()

两个变量:地图绘制

ggplot2提供了绘制地图的函数,依赖于包maps提供地理信息。

安装map

下面将绘制美国地图,数据集采用USArrests

对数据进行整理一下,添加一列state

三个变量

使用数据集mtcars,首先绘制一个相关性图

创建图层:

在此基础上可添加的图层有:

geom_tile(): 瓦片图

geom_raster(): 光栅图,瓦片图的一种,只不过所有的tiles都是一样的大小

现在使用使用geom_tile()绘制相关性矩阵图,我们这里这绘制下三角矩阵图,首先要整理数据:

绘制相关矩阵图

上图中蓝色代表互相关,红色代表正相关,至于coord_fixed()保证x,y轴比例为1

可以看出上图顺序有点乱,我们可以对相关矩阵进行排序

绘制图形

图元:多边形、路径、带状、射线(线段)、矩形等

本节主要讲述的是添加图形元件,将用到一下函数:

geom_polygon():添加多边形

geom_path(): 路径

geom_ribbon(): 带状

geom_segment(): 射线、线段

geom_curve(): 曲线

geom_rect(): 二维矩形

添加多边形

添加路径、带状、矩形

创建图层

添加路径

添加带状

添加矩形

添加线段

添加箭头

添加曲线

图形参数:主标题、坐标轴标签、图例标题

创建图层

修改标题以及标签的函数有:

ggtitle(“New main title”): 添加主标题

xlab(“New X axis label”): 修改x轴标签

ylab(“New Y axis label”): 修改y轴标签

labs(title = “New main title”, x = “New X axis label”, y = “New Y axis label”): 可同时添加主标题以及坐标轴标签,另外,图例标题也可以用此函数修改

修改主标题以及标签

修改标签属性:颜色、字体、大小等

使用theme()修改,element_text()可以具体修改图形参数,element_blank()隐藏标签

修改图例标题

图例位置以及外观

修改图例位置以及外观

移除图例

修改图例标题以及标签外观

修改图例背景

利用scale()函数自定义图例

主要两个函数:

scale_x_discrete():修改图例标签顺序

scale_fill_discrete(): 修改图例标题以及标签

自动/手动修改颜色

创建图层

修改填充色、轮廓线颜色

通过映射分组修改颜色

手动修改颜色

主要两个函数:

scale_fill_manual(): 填充色

scale_color_manual():轮廓色,如点线

使用RColorBrewer调色板

scale_fill_brewer(): 填充色

scale_color_brewer():轮廓色,如点线

RColorBrewer包提供以下调色板

还专门有一个灰度调色板:

梯度或连续颜色

有时我们会将某个连续变量映射给颜色,这时修改这种梯度或连续型颜色就可以使用以下函数:

scale_color_gradient(), scale_fill_gradient():两种颜色的连续梯度

scale_color_gradient2(), scale_fill_gradient2():不同梯度

scale_color_gradientn(), scale_fill_gradientn():多种颜色梯度

点颜色、大小、形状

R提供的点形状是由数字表示的,具体如下:

可通过以下方法对点的颜色、大小、形状进行修改:

scale_shape_manual() : to change point shapes

scale_color_manual() : to change point colors

scale_size_manual() : to change the size of points

文本注释

对图形进行文本注释有以下方法:

geom_text(): 文本注释

geom_label(): 文本注释,类似于geom_text(),只是多了个背景框

annotate(): 文本注释

annotation_custom(): 分面时可以在所有的面板进行文本注释

散点图注释

线型

R里的线型有七种:“blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, “twodash”,对应数字0,1,2,3,4,5,6.

具体如下:

同点一样,线也可以类似修改:

scale_linetype_manual() : to change line types

scale_color_manual() : to change line colors

scale_size_manual() : to change the size of lines

主题与背景颜色

创建箱线图

修改主题

ggplot2提供了好几种主题,另外有一个扩展包ggthemes专门提供了一主题,可以安装利用。

theme_gray(): gray background color and white grid lines

theme_bw() : white background and gray grid lines

theme_linedraw : black lines around the plot

theme_light : light gray lines and axis (more attention towards the data)

theme_minimal: no background annotations

theme_classic : theme with axis lines and no grid lines

ggthemes提供的主题

坐标轴:最大最小值

修改坐标轴范围有以下几种方式:

1、不删除数据

p+coord_cartesian(xlim=c(5, 20), ylim=c(0, 50)):笛卡尔坐标系,这是设定修改不会删除数据

2、会删除部分数据:不在此范围内的数据都会被删除,因此在此基础上添加图层时数据是不完整的

p+xlim(5, 20)+ylim(0, 50)

p+scale_x_continuous(limits=c(5, 20))+scale_y_continuous(limits=c(0, 50))

3、扩展图形范围:expand()函数,扩大范围

p+expand_limits(x=0, y=0):设置截距为0,即过原点

p+expand_limits(x=c(5, 50), y=c(0, 150)):扩大坐标轴范围,这样图形显示就小了

下面通过图形演示

坐标变换

坐标变换有以下几种:

p+scale_x_log10(),p+scale_y_log10(): 绘图时对x,y取10的对数

p+scale_x_sqrt(),p+scale_x_sqrt(): 开根号

p+scale_x_reverse(),p+scale_x_reverse():坐标轴反向

p+coord_trans(x =“log10”, y=“log10”): 同上,可以对坐标轴取对数、根号等

p+scale_x_continuous(trans=”log2”),p+scale_x_continuous(trans=”log2”): 同上,取对数的另外一种方法

下面实例演示:

坐标刻度:刻度线、标签、顺序等

更改坐标轴刻度线标签等函数:

element_text(face, color, size, angle): 修改文本风格

element_blank(): 隐藏文本

修改刻度标签等

移除刻度标签等

当然可以自定义坐标轴了

离散非连续坐标轴

scale_x_discrete(name, breaks, labels, limits)

scale_y_discrete(name, breaks, labels, limits)

连续型坐标轴

scale_x_conyinuous(name, breaks, labels, limits)

scale_y_continuous(name, breaks, labels, limits)

详细情况如下:

name: x,y轴的标题

breaks: 刻度,分成几段

labels:坐标轴刻度线标签

limits: 坐标轴范围

其中scale_xx()函数可以修改坐标轴的如下参数:

坐标轴标题

坐标轴范围

刻度标签位置

手动设置刻度标签

具体演示:

离散坐标轴

连续型坐标轴

修改坐标轴标签以及范围

更改y轴刻度,间隔50

修改y轴标签为百分数

添加直线:水平线、竖直线、回归线

ggplot2提供以下方法为图形添加直线:

geom_hline(yintercept, linetype, color, size): 添加水平线

geom_vline(xintercept, linetype, color, size):添加竖直线

geom_abline(intercept, slope, linetype, color, size):添加回归线

geom_segment():添加线段

实例演示:

添加直线:

图形旋转:旋转、反向

主要是下面两个函数:

coord_flip():创建水平方向图

scale_x_reverse(),scale_y_reverse():坐标轴反向

分面

分面就是根据一个或多个变量将图形分为几个图形以便于可视化,主要有两个方法实现:

facet_grid()

facet_wrap()

针对上面图形进行分面:

p+facet_grid(supp~.): 按变量supp进行竖直方向分面

p+facet_grid(.~supp): 按变量supp进行水平方向分面

p+facet_wrap(dose~supp):按双变量supp和dose进行水平竖直方向分面

p+facet_wrap(~fl): 将分成的面板边靠边置于一个矩形框内

1、按一个离散变量进行分面:

2、按两个离散变量进行分面

从上面图形可以看出,每个面板的坐标轴比例都是一样的,我们可以通过设置参数scales来控制坐标轴比例

位置调整

很多图形需要我们调整位置,比如直方图时,由堆叠式、百分式、分离式等,具体的要通过实例说明

堆叠式position=”stack”

position=”fill”类似玉堆叠图,只不过按百分比排列,所有柱子都被标准化成同样高度

position=”jitter”,(主要适用于散点图)增加扰动,避免重叠,前面讲的geom_jitter()就是来源于此

上面几个函数有两个重要的参数:heigth、weight。

position_dodge(width, height)

position_fill(width, height)

position_stack(width, height)

position_jitter(width, height)

坐标系

ggplot2中的坐标系主要有:

p+coord_cartesian(xlim=NULL, ylim=NULL):笛卡尔坐标系(默认)

p+coord_fixed(ratio=1, clim=NULL, ylim=NULL):固定了坐标轴比例的笛卡尔坐标系。默认比例为1

p+coord_flip(…):旋转笛卡尔坐标系

p+coord_polar(theta=”x”, start=0, direction=1):极坐标系

p+coord_trans(x,y,limx,limy):变换笛卡尔坐标系

coord_map():地图坐标系

各个坐标系参数如下:

1、笛卡尔坐标系:coord_cartesian(), coord_fixed() and coord_flip()

xlim:x轴范围

ylim:y轴范围

ratio:y/x

…:其他参数

2、极坐标系:coord_polar()

theta:外延坐标,x或y

start:坐标开始的位置,默认为12点钟

direction:方向:顺时针(1),逆时针(-1)

3、变换坐标系:coord_trans()

x,y:变换的坐标轴

limx,limy:坐标轴范围

实例演示:

可视化套路、配色和编辑

在线绘图和插件

CIRCOS系列

R统计和作图

NGS可视化

Cytoscape网络图

R统计绘图

鼠标点点绘图系列

高颜值免费在线绘图



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3