[英]Vertical line in histogram in r
我在R中使用了一些代碼。我試圖在同一個圖中創建6個不同的直方圖。 它工作正常,但我需要在6個直方圖的每一個中放置1條垂直線。 我正在使用的代碼可能如下所示:
require(ggplot2)
require(reshape2)
require(gdata)
MC_beta=rbind(rnorm(1000,-2,0.1),rnorm(1000,-1,0.1),rnorm(1000,0,0.1),rnorm(1000,0.5,0.1),rnorm(1000,1,0.1),rnorm(1000,2,0.1))
df <- data.frame(MC_beta[1,], MC_beta[2,], MC_beta[3,], MC_beta[4,],MC_beta[5,],MC_beta[6,])
names(df)[1:6]<-c("1", "2", "3", "4","5","6")
df2 = melt(df)
z=c(-2,-1,0,0.5,1,2)
ggplot(df2, aes(x=value, fill = variable)) + geom_vline(xintercept = z, colour="black") +geom_histogram(binwidth=0.03,colour = "black") + scale_fill_manual(name = "",values = c('red','blue',"red","blue","red","blue")) +
facet_wrap(~variable,nrow=6, ncol=1) + scale_x_continuous(breaks=seq(-2.5,2.5,0.5)) + guides(fill=FALSE) +
theme_bw() + theme(strip.background = element_blank(),axis.text=element_text(size=14.5),strip.text.x = element_text(size = 14.5)) + stat_function(fun = dnorm)
問題在於語句geom_vline(xintercept = z, colour = "black")
。 顯然,不是在每個直方圖中放置一條垂直線,而是在每個直方圖中放置所有6條線。 所以相反,我希望z中的第一個元素在第一個直方圖中形成一條垂直線,z中的第二個元素在第二個直方圖中形成一條垂直線,所以第四個。
謝謝
您的z
需要是一個data.frame
,其中包含定義facet的變量的每個值的相應xintercept
。 嘗試以下更改:
z <- data.frame(variable=levels(df2$variable),
mean=c(-2,-1,0,0.5,1,2))
ggplot(df2, aes(x=value, fill = variable))+
geom_vline(data=z, aes(xintercept = mean), colour="black") +
geom_histogram(binwidth=0.03,colour = "black") +
scale_fill_manual(name = "",values = c('red','blue',"red","blue","red","blue")) +
facet_wrap(~variable,nrow=6, ncol=1) +
scale_x_continuous(breaks=seq(-2.5,2.5,0.5))+ guides(fill=FALSE) +
theme_bw() +
theme(strip.background = element_blank(), axis.text=element_text(size=14.5), strip.text.x = element_text(size = 14.5)) +
stat_function(fun = dnorm)
我希望有所幫助。
您在數據外部有z
,因此您將在每個方面繪制一條垂直線。 采用
df2 <- (merge(df2, cbind.data.frame(variable=names(df), z)))
接着
geom_vline(aes(xintercept = z), colour="black")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.