我有以下代码绘制点并在它们之间画一条线。

ggplot (data = subset(df, vowel == "O" & gender == "f"), aes (x = time, y = val, color = formant)) +
      geom_point()+
      geom_line(aes(group=interaction(formant, number)))


它产生此:

r - 根据斜率在ggplot中更改线条颜色-LMLPHP

对于这些线的负斜率与正斜率,是否可以通过颜色/线型对它们进行分组?

编辑:
这是我的数据:

number <- c(1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
formant <- c("F2", "F2", "F2", "F2", "F2", "F2", "F3", "F3", "F3", "F3", "F3", "F3")
time <- c(50, 50, 50, 99, 99, 99, 50, 50, 50, 99, 99, 99)
val <- c(400, 500, 600, 450, 550, 650, 300, 400, 500, 250, 350, 450)


我想在valtime分组的formant上显示number值的移动。因此,当我实现答案时,它告诉我我的大小不兼容,我认为这与按数字分组的事实有关。

最佳答案

您尚未提供示例数据,因此这是一个典型的示例。通常的想法是,创建一个变量来测试斜率是否大于零,然后将其映射到颜色美观度上。在这种情况下,我使用dplyr链接运算符(%>%)以便在对ggplot的调用中动态添加斜率。 (我花了很多时间来计算斜率,但是您也可以测试是否value[t==2] > value[t==1]来代替。)

library(dplyr)

# Fake data
set.seed(205)
dat = data.frame(t=rep(1:2, each=10),
                 pairs=rep(1:10,2),
                 value=rnorm(20),
                 group=rep(c("A","B"), 10))

dat$value[dat$group=="A"] = dat$value[dat$group=="A"] + 6

ggplot(dat %>% group_by(pairs) %>%
         mutate(slope = (value[t==2] - value[t==1])/(2-1)),
       aes(t, value, group=pairs, linetype=group, colour=slope > 0)) +
  geom_point() +
  geom_line()


r - 根据斜率在ggplot中更改线条颜色-LMLPHP

更新:根据您的评论,听起来您只需要将number映射到美学或使用构面即可。这是使用示例数据的多面版本:

df = data.frame(number, formant, time, val)

# Shift val a bit
set.seed(1095)
df$val = df$val + rnorm(nrow(df), 0, 10)

ggplot (df %>% group_by(formant, number) %>%
          mutate(slope=(val[time==99] - val[time==50])/(99-50)),
        aes (x = time, y = val, linetype = formant, colour=slope > 0)) +
  geom_point()+
  geom_line(aes(group=interaction(formant, number))) +
  facet_grid(. ~ number)


r - 根据斜率在ggplot中更改线条颜色-LMLPHP

这是将number映射到点标记大小的另一个选项。这看起来不太好,仅用于说明如何将变量映射到图形中的不同“美学”(颜色,形状,大小等)。

ggplot (df %>% group_by(formant, number) %>%
          mutate(slope=(val[time==99] - val[time==50])/(99-50)),
        aes (x = time, y = val, linetype = formant, colour=slope > 0)) +
  geom_point(aes(size=number))+
  geom_line(aes(group=interaction(formant, number)))

关于r - 根据斜率在ggplot中更改线条颜色,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34113989/

10-11 06:54