r - ggplot,在跨面的点之间画线

标签 r ggplot2

使用 ggplot2,我如何绘制在面之间运行的趋势线。

library(ggplot2)
df <- data.frame(y=c(1,2,3),x=1,Set=LETTERS[1:3])
ggplot(df,aes(x,y)) + 
  theme_bw() + theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
  geom_point(aes(fill=Set),color="black",shape=21,size=3) + 
  facet_grid(~Set) + 
  xlim(1,5)

产生以下结果:

Output

在上面,我想在三个点之间画一条线,在各个方面移动。

最佳答案

更新到 ggplot2 V3.0.0

你可以这样做,但关闭剪辑可能会产生不必要的后果,

library(ggplot2)
df <- data.frame(y=c(1,2,3),x=1,Set=LETTERS[1:3])
p <- ggplot(df,aes(x,y)) + 
  theme_bw() + theme(legend.position=c(.01,.99),legend.justification=c(0,1)) + 
  geom_point(aes(fill=Set),color="black",shape=21,size=3) + 
  facet_grid(~Set) + 
  xlim(1,5) 

gb <- ggplot_build(p)
g <- ggplot_gtable(gb)

library(gtable)
library(grid)
# ggplot2 doesn't use native units in data space
# instead, the data is rescaled to npc, i.e from 0 to 1
# so we need to use the build info to convert from data to [0,1]
ranges <- gb$layout$panel_params
data2npc <- function(x, range) scales::rescale(c(range, x), c(0,1))[-c(1,2)]

start <- c(data2npc(1, ranges[[1]][["x.range"]]), 
           data2npc(1, ranges[[1]][["y.range"]]))

end <- c(data2npc(1, ranges[[3]][["x.range"]]), 
           data2npc(3, ranges[[3]][["y.range"]]))
# starting position in the first panel
g <- gtable_add_grob(g, moveToGrob(start[1],start[2]), 
                     t = 8, l = 5)
# draw line to end position in last panel
g <- gtable_add_grob(g, lineToGrob(end[1],end[2]), 
                     t = 8, l = 9, z=Inf)
# turn clip off to see the line across panels
g$layout$clip <- "off"
grid.newpage()
grid.draw(g)

enter image description here

关于r - ggplot,在跨面的点之间画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690007/

相关文章:

r - 如何在 R 中使用 ggMarginal 将箱线图添加到直方图

r - 如何通过多个变量重新排序条形图

python - 用奇异矩阵计算求解方程组

r - 列中的计数值使用空单元格表示新数字

r - 如何使用 R 脚本查找误报预测计数

r - 缺少参数 "by",没有默认值

r - 如何计算列中的变化

R:多行 switch 语句

r - ggplot2 将标签放在堆积条形图上

r - 积水排序层