2017-03-18 157 views
4

如何使用geom_segment在繪製線上繪製線條後,數據已用reshape2融化?R ggplot2:繪製點之間的線段

# Tiny dataset 
facet_group <- c("facet1", "facet1", "facet2", "facet2") 
time_group <- c("before", "after", "before", "after") 
variable1 <- c(1,5,4,7) 
variable2 <- c(2,4,5,8) 
variable3 <- c(4,5,6,7) 
data <- data.frame(facet_group, time_group, variable1, variable2, variable3) 

# Melt data 
library(reshape2) 
data_melt <- melt(data, id.vars = c("facet_group", "time_group")) 

圖中的數據:

# Plot 1 
library(ggplot2) 
ggplot(data_melt, aes(x=variable, y=value, group = time_group)) + 
    geom_point(aes(color = time_group)) 

plot1

加入刻面:

# Plot 2 
    ggplot(data_melt, aes(x=variable, y=value, group = time_group)) + 
     geom_point(aes(color = time_group)) + 
     facet_grid(facet_group ~ .) 

Plot with faceting

我想從每個變量的「之前」點到「之後」點繪製一個段。 (請參閱模擬圖像)。我怎樣才能做到這一點?我用geom_segment嘗試了一些東西,但我一直有錯誤。將數據轉換爲新的數據框有幫助嗎?謝謝!

data_cast <- dcast(data_melt, variable + facet_group ~ time_group) 

最後的 「理想」 的情節:

Ideal Final Plot

回答

4

你是絕對正確的軌道鑄造數據上。這給一個鏡頭:

ggplot(data_melt, aes(x=variable, y=value)) + 
    geom_point(aes(color = time_group)) + 
    facet_grid(facet_group ~ .) + 
    geom_segment(data = data_cast, aes(x = variable, xend = variable, 
            y = before, yend = after), 
       arrow = arrow(), 
       colour = "#FF3EFF", 
       size = 1.25) 

enter image description here

+1

添加'geom_segment'功能是至關重要的,但因此從'ggplot()'函數移動'time_group'變量到'geom_point'功能。謝謝! – Todd