我试图使用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
答案 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行为。