2014-07-06 89 views
3

如何在兩個面之間畫幾條線?在ggplot2的兩個面之間畫線

我試圖通過繪製頂點圖的最小值的點,但它們不在這兩個方面之間。見下圖。

enter image description here

這是我到目前爲止的代碼:

t <- seq(1:1000) 
y1 <- rexp(1000) 
y2 <- cumsum(y1) 
z <- rep(NA, length(t)) 
z[100:200] <- 1 

df <- data.frame(t=t, values=c(y2,y1), type=rep(c("Bytes","Changes"), each=1000)) 
points <- data.frame(x=c(10:200,300:350), y=min(y2), type=rep("Bytes",242)) 
vline.data <- data.frame(type = c("Bytes","Bytes","Changes","Changes"), vl=c(1,5,20,5)) 

g <- ggplot(data=df, aes(x=t, y=values)) + 
    geom_line(colour=I("black")) + 
    facet_grid(type ~ ., scales="free") + 
    scale_y_continuous(trans="log10") + 
    ylab("Log values") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1), panel.margin = unit(0, "lines"))+ 
    geom_point(data=points, aes(x = x, y = y), colour="green") 

g 
+0

如何使用'從包grid.lines''grid' – konvas

+0

爲你的主題添加',panel.background = element_rect(color =「black」)' –

回答

3

爲了做到這一點,你必須劇情內邊距設置爲零。你可以用expand=c(0,0)來做到這一點。我對你的代碼所做的更改:

  • 當您使用scale_y_continuous,您可以定義部內的軸標籤,你不需要seperarate ylab
  • 更改colour=I("black")colour="black"裏面geom_line
  • 增加了expand=c(0,0)scale_x_continuousscale_y_continuous

的完整代碼:

ggplot(data=df, aes(x=t, y=values)) + 
    geom_line(colour="black") + 
    geom_point(data=points, aes(x = x, y = y), colour="green") + 
    facet_grid(type ~ ., scales="free") + 
    scale_x_continuous("t", expand=c(0,0)) + 
    scale_y_continuous("Log values", trans="log10", expand=c(0,0)) + 
    theme(axis.text.x=element_text(angle=90, vjust=0.5), panel.margin=unit(0, "lines")) 

這給: enter image description here


添加線也與geom_segment來完成。通常線條(線段)將出現在兩個面上。如果你想他們兩個面之間出現,你將不得不限制在data參數:

ggplot(data=df, aes(x=t, y=values)) + 
    geom_line(colour="black") + 
    geom_segment(data=df[df$type=="Bytes",], aes(x=10, y=0, xend=200, yend=0), colour="green", size=2) + 
    geom_segment(data=df[df$type=="Bytes",], aes(x=300, y=0, xend=350, yend=0), colour="green", size=1) + 
    facet_grid(type ~ ., scales="free") + 
    scale_x_continuous("t", expand=c(0,0)) + 
    scale_y_continuous("Log values", trans="log10", expand=c(0,0)) + 
    theme(axis.text.x=element_text(angle=90, vjust=0.5), panel.margin=unit(0, "lines")) 

這給: enter image description here

+0

我用geom_point來繪製我想要的線條。這些行可以不連續。所以我的問題是如何將這些綠線恰好添加到兩個地塊的中間。 – Enrique

+0

@Enrique看到我更新的答案,這是你在找什麼? – Jaap

+0

@Enrique查看我更新的答案,我還添加了另一種繪製線條的方法。 – Jaap