[b]我有一组数据大概是这样的,6个样品,每个设置两个不同的处理,数据测量完成之后进行T测验得到以下数据。[/b]
[b]想用ggplot2画出柱状图,同时加上误差线和差异显著性的星号(每个处理的柱子中间)。[/b]
[b]类似下面的这种:[/b]
[attach]217[/attach]
数据如下:
[attach]218[/attach]
我试着写了如下代码:[code]library(ggplot2)
library(Cairo)
data.t.test <- read.csv("tmp.csv")
# 构建画星号所需要的数据框
sample.list.t <- c("A1","B1","C1","D1","E1","F1")
star.data <- data.frame(sample.list.t)
names(star.data) <- c("Sample")
# 根据不同处理的数值大小,星号的高度要高于数值较大的那个处理
for(i in factor(sample.list.t)){
value.OSPH <- data.t.test$Average[data.t.test$Sample==i & data.t.test$Type=="OSPH"]
value.TSPH <- data.t.test$Average[data.t.test$Sample==i & data.t.test$Type=="TSPH"]
if(as.numeric(value.OSPH) >= as.numeric(value.TSPH)){
star.data$Average[star.data$Sample==i] <- (value.OSPH * 1.05)
}else{
star.data$Average[star.data$Sample==i] <- (value.TSPH * 1.05)
}
P.value <- data.t.test$P.value[data.t.test$Sample==i & data.t.test$Type=="TSPH"]
if(as.numeric(P.value) <= 0.01){star.data$Lable[star.data$Sample==i] <- "**"}
if(as.numeric(P.value) > 0.01 & as.numeric(P.value)<=0.05){star.data$Lable[star.data$Sample==i] <- "*"}
}[/code]
可以得到画星号所需的数据如下:
[attach]216[/attach][code]CairoPNG(filename = "t-test.png", width = 8000, height = 5000, res = 600)
#### 困扰就在这里,感觉我不应该把映射设置在这里,但我也搞不清楚应该设置在哪里,求解释。
p <- ggplot(data=data.t.test,mapping=aes(x=Sample,y=Average,fill = Type,
ymin = Average-SE, ymax = Average+SE))
# 柱状图的图层
fig1 <- p + geom_bar(stat = "identity",position = "dodge",width = 0.65) +
xlab("Samples") + ylab("HD") +
theme(panel.background = element_rect(fill="white"),
axis.title = element_text(family="Times New Roman",size=16,face="bold",color="black"),
axis.text.x = element_text(family="Times New Roman",size=16,face="bold",color="black"),
axis.text.y = element_text(family="Times New Roman",size=11,face="bold",color="black"),
legend.text = element_text(family="Times New Roman",size=16,face="bold",color="black"),
legend.position = "top", legend.title = element_blank()
)
# 加误差线
fig2 <- fig1 + geom_errorbar(position="dodge", width=0.65, size=0.7,colour="darkblue")
# 加星号
fig2 + geom_text(data=star.data,aes(x=Sample,y=Average,label=star.data$Lable))
dev.off()[/code]得到如下报错:[code]> fig2 + geom_text(data=star.data,aes(x=Sample,y=Average,label=star.data$Lable))
Error in FUN(X[[i]], ...) : object 'Type' not found[/code]
阅读全文
收起全文