0

有没有办法facet_wrap()通过geom_lineR 或 ggplot 中 a 的斜率,使得对于每个geom_line,该线的所有具有正斜率的区域都放置在一个方面,所有具有负斜率的区域都放置在另一个方面,并且所有区域没有坡度被放置在第三个方面?

例如,在下面的最小示例中,目标是将线 a 和 b 的上升段放置在正斜率刻面,将线 a 和 b 的下降段放置在负刻面,并将 a 和 b 的线段放置在无坡面无坡度:

library(ggplot2)
a.df <- data.frame(matrix(c('A',0,2,'A',1,6,'A',2,6,'A',3,4,'B',0,5,'B',1,4,'B',2,4,'B',3,6),ncol=3,byrow=TRUE))

a.df$X2 <- as.numeric(as.character(a.df$X2))
a.df$X3 <- as.numeric(as.character(a.df$X3))

ggplot(a.df, aes(x=X2,y=X3,colour=X1)) +
  geom_line()

在此处输入图像描述

我尝试了您的回复 MrFlick,但如果它们的全局斜率是正数或负数,它看起来像是在正斜率或负斜率类别中的放置线。我想知道是否可以将每条线的所有具有正斜率或负斜率的子区域放置到不同的方面。有没有办法修改你的代码来完成这个任务?如果您能就这个问题提供任何帮助,我将不胜感激。

4

1 回答 1

1

既然您想将每个更改视为一个单独的段,您可以将其重新定位到不同的方面,那么您需要相应地转换您的数据。这是一种使用方法dplyr

library(dplyr)

b.df <- a.df %>% group_by(X1) %>% arrange(X2) %>% 
    mutate(X4=lead(X2), X5=lead(X3), slopesign=sign(X5-X3))

ggplot(subset(b.df, !is.na(slopesign))) +
  geom_segment(aes(x=X2,y=X3, xend=X4, yend=X5, color=X1)) + 
  facet_wrap(~slopesign)

在此处输入图像描述

于 2015-04-11T00:34:02.163 回答