ggplot2 geom_line()特定值之间的箭头方向

时间:2019-03-10 19:01:30

标签: r ggplot2

我正在尝试执行类似于本帖子here的操作,使用箭头将基于分组(在本例中为站点)的点连接起来,并根据特定值(年份)指定箭头方向。我无法获得箭头的方向才能正常工作。我希望箭头的方向从2017年到2018年(对于每个不同的网站)。下面是我到目前为止的代码和示例数据(这是从协调输出的示例前4行示例)。

ggplot() +
  geom_point(data = data.scores[1:4,], aes(x = NMDS1, y = NMDS2), 
    shape = year[1:4]) + 
  geom_line(data = data.scores[1:4,], aes(x=NMDS1, y=NMDS2, group = site), 
    arrow = arrow(length = unit(0.15, "cm")))

样本数据如下:

>data.scores
        NMDS1        NMDS2  site year
1 -0.009286247 -0.009874382   1  2018  
2 -0.099650245  0.021869952   1  2017  
3  0.034465891  0.043034188   2  2018  
4  0.040777968  0.028120489   2  2017 

因此,此输出将是从点2(站点1,2017年)到点1(站点1,2018年)的箭头。我看过很多类似的文章,但还不太清楚,谢谢。

1 个答案:

答案 0 :(得分:0)

一种方法是按year对数据进行排序,并使用geom_path而不是geom_line,后者按数据顺序而不是x变量的顺序进行绘制。

library(dplyr) #for arrange and %>%
library(ggplot2)

data.scores %>% 
   arrange(year) %>% #sort ascending so that 2018 is plotted last
   ggplot() +
   geom_point(aes(x = NMDS1, y = NMDS2, shape = factor(year)), 
              size = 3) + #I've made it bigger so you can see it better!
   geom_path(aes(x = NMDS1, y = NMDS2, group = site), 
             arrow = arrow(length = unit(0.55, "cm")))

enter image description here

请注意,如果您希望每年使用不同的形状,则shape参数必须位于aes()内。