您好我已经生成了以下内容:
使用以下代码:
library(ggplot2,quietly=TRUE)
args <- commandArgs(TRUE)
data <-read.table(args[1],header=T,sep="\t")
pdf(args[2])
p1 <- ggplot( data,aes(x=Mutation,y=difference) ) +
geom_bar( width=.75,aes(fill=as.factor(position),stat="identity"),position="dodge") +
geom_errorbar(aes(y=difference, ymin=difference-difference_std, ymax=difference+difference_std )) +
theme(legend.key = element_blank()) +
ylab(expression(Delta*"Energy (Design - Wild Type)" )) +
xlab( "Mutation" ) +
ylim(-2.5,2.5) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
opts(legend.position="none")+
ggtitle(expression("PG9 Mutational Analysis"))
p1
dev.off()
正如您所看到的,我使用填充图层对位置进行了分组,因此您可以将它们组合在一起。理想情况下,虽然我希望在位置发生变化时在xbreak中休息,而不是按颜色对它们进行分组。
所以它会像橙条,橙条,休息,绿条,休息,青色酒吧,休息等......
*编辑:
以下是输入表中的数据:
position Mutation difference difference_std
97 R97L -0.3174848488298787 0.2867477631591484
97 R97N 0.5333956571765566 0.35232170408577224
99 A99H -0.2294999853769939 0.24017957128601522
99 A99S -0.45171049187057877 0.0013816966425459903
101 G101S 0.5315110947026147 0.08483810927415139
102 P102S -0.04872141488960846 0.02890820273131048
103 D103Y 0.6692000007629395 0.07312815307204293
....
所以所有的位置都会被组合在一起,两边都有一个休息点。 我希望我有意义。有一个简单的方法吗?
Ĵ
答案 0 :(得分:3)
我认为最简单的方法是使用分面(使用过的样本数据)。要获得分面的新变量,请首先根据Mutation
订购数据框。然后添加新列pos2
,根据列cumsum()
使用diff()
和position
添加数字序列(@agstudy的想法)。
df2<-df[order(df$Mutation),]
df2$pos2<-cumsum(c(0,diff(df2$position)) != 0)
df2
position Mutation difference difference_std pos2
3 99 A99H -0.22949999 0.240179571 0
4 99 A99S -0.45171049 0.001381697 0
7 103 D103Y 0.66920000 0.073128153 1
5 101 G101S 0.53151109 0.084838109 2
6 102 P102S -0.04872141 0.028908203 3
1 97 R97L -0.31748485 0.286747763 4
2 97 R97N 0.53339566 0.352321704 4
现在使用新列pos2
进行构面。使用theme()
和strip.text=
以及strip.background=
,您可以删除条文和灰色背景。
ggplot(df2,aes(x=Mutation,y=difference) ) +
geom_bar( width=.75,aes(fill=as.factor(position),
stat="identity"),position="dodge") +
geom_errorbar(aes(y=difference, ymin=difference-difference_std,
ymax=difference+difference_std )) +
theme(legend.key = element_blank()) +
ylim(-2.5,2.5) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
theme(legend.position="none")+
theme(strip.text=element_blank(),
strip.background=element_blank())+
facet_grid(.~pos2,scales="free_x",space="free_x")
其他可能性是使用scale_x_discrete()
和参数limits=
并在需要空格(实际级别)之间的位置添加空白级别。此方法的问题是您需要手动添加这些级别。
例如,使用与前一个示例相同的数据(有序问题数据)。
ggplot(df2,aes(x=Mutation,y=difference) ) +
geom_bar( width=.75,aes(fill=as.factor(position),
stat="identity"),position="dodge") +
geom_errorbar(aes(y=difference, ymin=difference-difference_std,
ymax=difference+difference_std )) +
theme(legend.key = element_blank()) +
ylim(-2.5,2.5) +
theme_bw() +
theme(axis.text.x = element_text(angle = 90,size=9,hjust=1))+
theme(legend.position="none")+
scale_x_discrete(limits=c("A99H", "A99S","", "D103Y","","G101S",
"","P102S","","R97L", "R97N"))
答案 1 :(得分:1)
我认为您首先需要创建一个对标签进行分组的新变量。
dat$group <- cumsum(c(0,diff(dat$position)) != 0)
Mutation difference position group
20 0wYpO 0.93746859 4 0
17 63L00 -0.57833783 4 0
3 6hfEp -1.01620448 3 1
1 FvAz4 0.09496127 2 2
8 ghNTj -1.10180158 3 3
14 GxYzD 0.41997924 3 3
然后我认为这不会是一个为你的情节添加空白的简单方法。但您可以按组创建条形图,并使用geom_text添加基因名称。这里是第一个版本,我希望有更多经验丰富的ggplot2可以帮助调整中间的文本
ggplot( dat,aes(x=factor(group),y=difference) ) +
geom_bar( width=.75,aes(fill=as.factor(Mutation)),stat="identity",
position="dodge") +
geom_text(aes(label=Mutation),position=position_dodge(height=0.9),angle=90)+
theme_bw() +
opts(legend.position="none")
PS:以下代码可用于生成数据:
N <- 21
Mutation <- replicate(N,paste(sample(c(0:9, letters, LETTERS),
5, replace=TRUE),
collapse=""))
difference <- rnorm(N)
position <- c(4, 4, 3, 2, 3, 3, 2, 3, 2,
5, 2, 2, 2, 5, 5,
5, 2, 4, 5, 4, 2)
difference_std <- sd(difference)
dat <- data.frame(Mutation,difference)
dat <- dat[order(dat$Mutation),]
dat$position <- position
dat$group <- cumsum(c(0,diff(dat$position)) != 0)