【问题标题】:Producing curves with varying size to connect points in ggplot2生成具有不同大小的曲线以连接 ggplot2 中的点
【发布时间】:2018-10-06 00:45:57
【问题描述】:

问题:

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

可重现的例子:

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) 

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

  1. 曲线应该按时间顺序连接点 1 -- 2 -- 3(根据df$order 即)
  2. 通过aes(size=value) 创建的端点大小决定了各自的曲线大小。
  3. 曲线大小以一种非常平滑的方式增大/减小。

我想要实现的或多或少是这个(对不起我糟糕的 MS 绘画技巧......幸运的是,这个草图违反了规则 3......):

如果能够将aes() 传递给曲线也很好,例如colour...我一直在玩geom_curvegeom_segment,但我没有走多远。 ..

整个练习旨在重现 this 惊人的信息图。

【问题讨论】:

  • 关于您的想法的一些知识。 1)如果你有足够的点,你可以使用 geom_path() 使用曲线(段)连接点。 2)。如果您希望曲线平滑并根据大小进行调整,曲线的形状会产生误导。
  • 我对此非常感兴趣。您可能想查看ggforce 包中的geom_link2,它类似于geom_path,但在点之间插入了一个计算索引。您可能还会研究如何在您的点之间做样条,但我不知道如何做到这一点

标签: r ggplot2 curve


【解决方案1】:
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)

【讨论】:

  • 好的开始,但不是我想要的。您将曲线的大小固定为 1。我希望它调整到末端的点大小。
猜你喜欢
  • 2015-12-25
  • 2020-01-06
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多