R ggplot2:在点之间绘制线段

7

在使用reshape2将数据融合后,如何使用geom_segment在图表上绘制线条?

# 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 ~ .) 

切分图示例

我想为每个变量从“前”点绘制线段到“后”点(见模拟图)。如何做到这一点?我使用了geom_segment,但是出现了错误。将数据转换为新的数据框是否有帮助?谢谢!

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

最终“理想”的图表:

理想的最终图表

1个回答

6
您的想法是正确的,可以尝试使用转换后的数据。请尝试以下方法:
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


2
添加 geom_segment 函数非常关键,但将 time_group 变量从 ggplot() 函数移动到 geom_point 函数也同样重要。谢谢! - Todd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接