使用ggplot2画基因表达样本的箱线图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ggplot2画基因表达样本的箱线图相关的知识,希望对你有一定的参考价值。

参考技术A library(ggplot2)

library(reshape2)

############################################

#画箱式图,这里我画的是基因表达样本的箱线图,首先导入数据,将数据调成行是基因名,纵是样本名,数据为各个基因在样本中的表达量

count = read.table("genecount.txt",header = T)

rownames(count) = count[,1]

count = count[-1]

#去掉在所有样本中表达量为0的基因

count = count[which(rowSums(count)>0),]

#melt函数是对数据框进行转化,variable.name和value.name是设置转化后的列名,具体效果建议实操看一下

count = melt(count,variable.name = "sample",value.name = "value")

# 取log2值让数据更集中

count$value = log2(count$value+1)

#data是要画图的数据,一个数据框,后面ase里的x和y分别代表画图时的横坐标和纵坐标,fill=sample指按照样本来填充颜色即不同的样本使用不同的颜色

p <- ggplot(data = count,aes(x=sample,y=value,fill=sample))

#theme是给图添加样式,第一个是设置横坐标的显示形式,旋转90度,即竖着显示。后面两个参数是设置横纵坐标的名字

p1 <- p + geom_boxplot() + theme(axis.text.x = element_text(angle = 90)) + xlab(NULL) + ylab("log2(COUNT+1)")

p1

出来的结果是这样的(坐标信息不方便让大家看到,就遮掉了)

如何用R中的样本组制作特定行的箱线图

【中文标题】如何用R中的样本组制作特定行的箱线图【英文标题】:how to make boxplot of specific row with group of sample in R 【发布时间】:2021-11-13 06:59:10 【问题描述】:

我是R中的新手,想请教帮我制作分组的箱线图我有2个文件,文件1是样本的值(基因表达)test.txt

gene group1.1 group1.2 group2.1 group2.2
a1 12 13 12 12
a2 2 3 25 31
a3 24 30 34 22
a4 10 11 23 24

文件 2 是样本设计 design.txt

file condition
group1.1 group1
group1.2 group1
group2.1 group2
group2.2 group2

我想用一个特定的行在 R 中制作箱线图,例如:a1 并有 2 个组 1 和 2;输出看起来像 boxplot-a1

我怎样才能做到这一点,直接从 2 个文件?我觉得我做的很蠢

dt1 <- read.delim("test.txt", sep="\t", header = TRUE)
dg <- read.delim("design.txt", sep="\t", header = TRUE)

我通过复制和转置来制作新文件:

gene name group expression
a1 Group1.1 group1 12
a1 Group1.2 group1 13
a1 Group2.1 group2 12
a1 Group2.2 group2 12.5
a2 Group1.1 group1 2
a2 Group1.2 group1 3
a2 Group2.1 group2 25
a2 Group2.2 group2 31
    dt <- read.delim("test_t.csv", sep="\t", header = TRUE)

    a1 <- dt[dt$gene %in% "a1",]
    ggplot(a1, aes(x=a1$group, y=a1$expression)) + 
       labs(title = "Expression A1", x = "Group", y = "Expression") +
       stat_boxplot(geom = "errorbar", width = 0.15) + 
        geom_boxplot()

非常感谢您的帮助!

【问题讨论】:

这是一个从 R 开始并绘制 r4ds.had.co.nz/data-visualisation.html 的好地方 感谢您的建议。我会多练习 【参考方案1】:

有了这样的数据,值得先把chr类型的变量转换成因子。

library(tidyverse)

df = read.table(
  header = TRUE,text="
  gene  name    group   expression
a1  Group1.1    group1  12
a1  Group1.2    group1  13
a1  Group2.1    group2  12
a1  Group2.2    group2  12.5
a2  Group1.1    group1  2
a2  Group1.2    group1  3
a2  Group2.1    group2  25
a2  Group2.2    group2  31") %>% 
  as_tibble() %>% 
  mutate(
    gene = gene %>% fct_inorder(),
    name = name %>% fct_inorder(),
    group = group %>% fct_inorder()
  )

现在您可以为gene 变量的一个值制作箱线图

df %>% filter(gene == "a1") %>% 
  ggplot(aes(gene, expression))+
  geom_boxplot()

同时用于两个值

df %>%
  ggplot(aes(gene, expression, fill=gene))+
  geom_boxplot()

【讨论】:

我很高兴能帮上忙。请记住,在 Stack Overflow 上,您可以通过选择已批准的解决方案来表示感谢。 我知道了,非常感谢 Marek Fiołka

以上是关于使用ggplot2画基因表达样本的箱线图的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 不会将图例添加到具有多个层的箱线图

ggplot2 按第 80 个百分位重新排列我的箱线图

在ggplot2中绘制两个具有相同y变量但不同x变量的箱线图

Fig4-a ggplot2绘制箱线图叠加散点图2020-12-14

箱线图(ggplot2)未按预期工作

用一条线连接箱线图(ggplot2)