生成不同大小的曲线以连接ggplot2中的点

时间:2018-04-25 13:46:21

标签: r ggplot2 curve

问题:

我想用曲线连接点,而曲线大小根据其各自端点的大小沿路径调整。

可重复示例:

library("tidyverse")
df <- data.frame(x=c(1,3,2),
             y=c(1,4,3),
             value=c(2,10,15),
             order=c(1,2,3))

ggplot(df) +
  geom_point(aes(x=x,
                 y=y,
                 size=value),
             alpha=0.5) 

enter image description here

到目前为止,这么好。现在我想根据以下规则添加连接点的曲线:

  1. 曲线应该按时间顺序链接点1 - 2 - 3(根据df$order
  2. 通过aes(size=value)创建的终点尺寸决定了各自的曲线大小。
  3. 曲线大小以漂亮,平滑的方式增加/减少。
  4. 我想要实现的目标或多或少(对于我可怕的MS绘画技巧而言......很遗憾,规则3在此草图中被违反......):

    aes()传递给曲线也很高兴,例如colour ......我一直在玩geom_curvegeom_segment ,但我没有走得太远......

    整个练习用于重现this惊人的信息图。

1 个答案:

答案 0 :(得分:0)

df %>% 
  mutate( x1 = c(NA, x[1:(nrow(df)-1) ] )) %>% 
  mutate( x2 = c(NA, x[2:(nrow(df)) ]   )) %>% 
  mutate( y1 = c(NA, y[1:(nrow(df)-1) ] )) %>% 
  mutate( y2 = c(NA, y[2:(nrow(df)) ]   )) ->df

df %>% 
  ggplot(aes(x=x, y=y,size=value)) +
  geom_point(alpha=0.5) +
  geom_curve(aes(x = x1, xend = x2, y = y1, yend = y2),
         curvature = .25, size = 1)

geom_curve