我有以下代码绘制点并在它们之间画一条线。
ggplot (data = subset(df, vowel == "O" & gender == "f"), aes (x = time, y = val, color = formant)) +
geom_point()+
geom_line(aes(group=interaction(formant, number)))
它产生此:
对于这些线的负斜率与正斜率,是否可以通过颜色/线型对它们进行分组?
编辑:
这是我的数据:
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)
我想在
val
和time
分组的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()
更新:根据您的评论,听起来您只需要将
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)
这是将
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/