2016-09-07 179 views
0

我试图用ggplot绘制我的值,但ggplot不断重新编码我的轴。以下是我的输入文件外观的快照。我有超过50个样本。R程序 - 如何避免ggplot在x轴和y轴重新排序

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

回答

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行为。

+0

我应该注意到输入文件只是一个快照。我有超过50个样本,所以一个接一个地输入是不实际的 –

+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))的操作。