R程序 - 如何避免ggplot在x轴和y轴上重新排序

时间:2016-09-07 04:51:07

标签: r ggplot2

我试图使用ggplot绘制我的值,但ggplot会继续重新排列我的轴。下面是我的输入文件的样子快照。我有50多个样本。

INPUT.txt

 Sample        Effect                Gene
TCGA-D1-A17D   stop gained           ACE
TCGA-B5-A0K4   stop gain             CBLC    
TCGA-AP-A052   frameshift variant    BRIP1

这是我的r代码来创建“热图”

library(reshape)
library(ggplot2)
all_data<- read.table(INPUT.txt", sep= "\t", header = T)
all_data.m <- melt(all_data)

#here's my attempt to try to sort the figure , but i can only sort according to just one axis

all_data.m$Gene <- factor(all_data.m$Gene, levels = all_data.m$Gene[order(all_data.m$Sample)])

cbPalette <- c("violetred", "yellowgreen", "dodgerblue3", "lightcyan4", "cyan2")
p <- ggplot(all_data.m, aes( x=Sample , y= Gene)) + geom_tile(aes(Sample, fill = Effect))+ scale_fill_manual(values=cbPalette)
p <- p + theme(axis.text.x  = element_text(angle=90, vjust=0.5, size=65, face = "bold"), axis.text.y  = element_text(size=65, face = "bold" ))
p <- p + theme(axis.ticks = element_line(size = 1))
p <- p + theme(axis.line = element_line(size = 5))
p <-  p+ theme(legend.text = element_text(size = 80, face = "bold"))
p <-  p+ theme(legend.key.size = unit(5, "cm"))
p <- p + theme(axis.title=element_text(size=80,face="bold"))
print(p)

如何根据我的输入文件创建图形而不重新排序两个轴

所以我的x轴需要依次为TCGA-D1-A17D,TCGA-B5-A0K4,TCGA-AP-A052。

我的y轴是ACE,CBLC,BRIP1

2 个答案:

答案 0 :(得分:1)

看起来您希望系数的级别按照它们在数据集中出现的顺序排列。您可以使用数据集中变量的unique值来设置级别顺序。

示例:

all_data.m$Gene = factor(all_data.m$Gene, levels = unique(all_data.m$Gene))

新级别

Levels: ACE CBLC BRIP1

新的 forcats 包使这项工作变得更加容易。该软件包旨在使用各种因素,包括更改绘图级别顺序的非常常见的任务,更直接。

要按照数据集中显示的顺序排列级别,请使用fct_inorder

library(forcats)
all_data$Sample = fct_inorder(all_data$Sample)

Levels: TCGA-D1-A17D TCGA-B5-A0K4 TCGA-AP-A052

您的绘图轴将遵循因子的顺序。

请注意,y轴将从左下角的第一个水平开始,然后沿y轴向上绘制。如果您希望第一个级别ACE位于左上角,则可以执行fct_inorder(rev(all_data.m$Gene))fct_rev(fct_inorder(all_data.m$Gene))之类的操作。

答案 1 :(得分:0)

如果要手动覆盖x轴的顺序,则应按所需顺序设置级别:

all_data.m$Sample <- factor(all_data.m$Sample, levels = c("TCGA-D1-A17D", "TCGA-B5-A0K4", "TCGA-AP-A052"))

如果您可以通过排序获得所需的订单,则可以使用:

all_data.m$Gene <- factor(all_data.m$Gene, levels = sort(all_data$Gene))

如果您想要rev()函数周围的反向排序sort()

由于您正在使用字符串,因此您可能还需要确保使用options(stringsAsFactors = FALSE)启动脚本以避免非直观的R行为。