2016-09-07 2 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 

Вот мои г коды, чтобы создать «Heatmap»

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) 

Как создать фигуру в соответствии с моим входным файлом без переназначения как ось

Таким образом, мой оси х т.е. она должна для того чтобы быть TCGA-D1-A17D, TCGA-B5-A0K4, TCGA-AP-A052 в заказе.

И моя у-ось ACE, CBLC, BRIP1

ответ

0

Если вы хотите вручную переписать порядок оси х, вы должны установить уровни в порядке, вы хотите:

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)).

Смежные вопросы