文献配套GitHub发表级别绘图03-条形图

2022-03-03 14:20:55 浏览数 (1)

下面是去年实习生的分享

author: "ylchen"

文章来源:"Preoperative immune landscape predisposes adverse outcomes in hepatocellular carcinoma patients with liver transplantation" (2021,npj Precision Oncology),数据与代码全部公开在https://github.com/sangho1130/KOR_HCC。

下面来实现Fig.2a的条形图(barplots)

一、数据载入

代码语言:javascript复制
rm(list = ls())
library(reshape2)
library(ggplot2)
library(RColorBrewer)
data <- read.table('../data/Figure 2A input relative score.txt', sep = "t",header = TRUE, check.names = FALSE)
# 变成因子,调整顺序
data$Status <- factor(data$Status, c("Normal", "FL", "FH", "CS", "DL", "DH", "Nontumor", "Tumor"))
# 行为样本类型,列为细胞
head(data)
# ggplot 画图需要 宽数据变成 长数据 
melt.data <- melt(data, variable.name = 'Cell', value.name = 'Relative')
head(melt.data)

基础R包---reshape2包

melt-把宽格式数据转化成长格式。

cast-把长格式数据转化成宽格式。(dcast-输出时返回一个数据框。acast-输出时返回一个向量/矩阵/数组。)

cast 函数的作用除了还原数据外,还可以对数据进行整合。

dcast 输出数据框。公式的左边每个变量都会作为结果中的一列,而右边的变量被当成因子类型,每个水平都会在结果中产生一列。

reshape2

(另外,tidyr包中gather和spread函数也能实现功能哦!)

二、条形图(相对比例)

代码语言:javascript复制
# 8个样品组的 22种免疫细胞比例 
p <- ggplot(melt.data ,aes(x = Status, # 设置x轴 
                           y = Relative, # 设置y轴
                           fill = Cell))  # 设置图形填充变量
  geom_bar(stat="identity")   #stat="count"表示条形的高度是y变量的数量    
  #stat="identity"表示条形的高度是y变量的值
  scale_fill_manual(values = colorRampPalette(brewer.pal(11, "Spectral"))(22))   # 设置填充颜色
  theme_bw()   # 空白背景
  theme(axis.text = element_text(colour = 'black'), #刻度值
        axis.text.x = element_text(angle = 90, hjust = 1), # x轴刻度值
        panel.grid = element_blank())   # 空白网格线
  labs(x = '', y = 'Relative fraction') # 设置xy轴标签
p
#ggsave('../results/Figure 2A input relative score.pdf', p)

两个知识点

上面画图函数涉及到了颜色与theme的设置,接下来介绍下这两个知识点。

1. 详解RColorBrewer包

  • ggplot2画图时会自带配色设置,但一般比较难看。当想使用一些高级,现有的颜色搭配时,不妨考虑下RColorBrewer包。
  • 下面介绍下基本用法
代码语言:javascript复制
library(RColorBrewer)
display.brewer.all() # 查看所有颜色
# brewer.pal.info  # 返回画板名,最大颜色数,调色板类型,是否对色盲友好

RColorBrewer包提供三种配色方案

  1. 连续型Sequential, 颜色渐变。
  2. 极端型Diverging,生成深色强调两端、浅色表示中部的颜色,可用来标注数据中的离群点。
  3. 离散型Qualitative,生成彼此差异明显的颜色,通常用来标记分类数据。

说明书:https://cran.r-project.org/web/packages/RColorBrewer/RColorBrewer.pdf

在线版:https://colorbrewer2.org/#type=sequential&scheme=BuGn&n=3

display函数显示颜色

代码语言:javascript复制
# 单独查看分类
display.brewer.all(type = "seq")  # 单独查看第1类颜色
display.brewer.all(type = "qual")
display.brewer.all(type = "div")

代码语言:javascript复制
# 选择颜色块及数量
cols <- brewer.pal(n=3, name="BuGn")
# name: the name of the color palette you want to use
# n: the number of colors you want from the palette (integer)
cols
# 可视化
display.brewer.pal(n=3, name="BuGn")

加入到ggplot2

主要通过scale_fill_manual函数添加颜色

  1. 先选择色块:调用Spectral调色板,取11个颜色,赋值给cols
  2. 把cols赋值给colorRampPalette
  3. 添加到ggplot2:scale_fill_manual
代码语言:javascript复制
# 过程如下:先选择色块
# 调用Spectral调色板,取11个颜色,赋值给cols
cols <- brewer.pal(11, "Spectral") 
# 可视化
display.brewer.pal(11, "Spectral")
# 把cols赋值给colorRampPalette
pal <- colorRampPalette(cols) 
image(volcano, col=pal(22)) 
# 数据集volcano,颜色设置为:Spectral调色板选择11个颜色,在这11个颜色之间进行连续取值(共22个颜色)
# 若添加到ggplot2
# scale_fill_manual(values = colorRampPalette(brewer.pal(11, "Spectral"))(22))

2. theme用法

相信大家也留意到上面设置theme时使用了几个函数,但实际上还有很多内容可以调整,下面这个图简直是宝藏!

代码语言:javascript复制
  theme(axis.text = element_text(colour = 'black'), # 刻度值
        axis.text.x = element_text(angle = 90, hjust = 1), # x轴刻度值
        panel.grid = element_blank()) # 空白网格线

参考:https://ggplot2.tidyverse.org/reference/theme.html

三、条形图(相对比例)

  • 其实就是输入数据的不同
代码语言:javascript复制
data <- read.table('../data/Figure 2A input absolute score.txt', sep = "t",header = TRUE, check.names = FALSE)
head(data)
data$Status <- factor(data$Status, c("Normal", "FL", "FH", "CS", "DL", "DH", "Nontumor", "Tumor"))
melt.data <- melt(data, variable.name = 'Cell', value.name = 'Absolute')
head(melt.data)
p <- ggplot(melt.data ,aes(x = Status, y = Absolute, fill = Cell))   
  geom_bar(stat="identity")   
  scale_fill_manual(values = colorRampPalette(brewer.pal(11, "Spectral"))(22))   
  theme_bw()   
  theme(axis.text = element_text(colour = 'black'),
        axis.text.x = element_text(angle = 90, hjust = 1),
        panel.grid = element_blank())   
  labs(x = '', y = 'Absolute fraction')
p
#ggsave('../results/Figure 2A input absolute score.pdf', p)

0 人点赞