r - 许多具有不同颜色的曲线的简单图
问题描述
我有以下数据框,除了标签向量c之外,它还包含4列数据。
Time <-c(1:4)
d<-data.frame(Time,
x1= rpois(n = 4, lambda = 10),
x2= runif(n = 4, min = 1, max = 10),
x3= rpois(n = 4, lambda = 5),
x4= runif(n = 4, min = 1, max = 5),
c=c(1,1,2,3))
我想用来在彼此上方ggpolt
绘制 4 条曲线"x1,..,x4"
,其中每条曲线都根据标签着色。所以曲线x1
和x2
用相同的颜色着色,因为它们具有与曲线相同的标签并且具有x3
不同x4
的颜色。
我做了以下
d %>% pivot_longer(-c(Time,x1,x2,x3,x4))%>%
rename(class=value) %>% select(-name) %>%
pivot_longer(-c(Time,class)) %>%
mutate(Label=ifelse(Time==max(Time,na.rm = T),name,NA),
Label=ifelse(duplicated(Label),NA,Label)) %>%
ggplot(aes(x=Time,y=value,color=factor(class),group=name))+
geom_line()+
labs(color='class')+
scale_color_manual(values=c('red','blue','green'))+
geom_label_repel(aes(label = Label),
nudge_x = 1.5,
na.rm = TRUE,show.legend = F,color='black')
但我没有得到所需的情节,结果曲线没有根据标签着色。我想要红色,蓝色和x1
绿色。x2
x3
x4
添加:我想在以下一般情况下获得与上面相同的图,其中我无法将向量添加c
到数据框中,因为length(c)
不等于length(x1)=...=length(x4)
Time <-c(1:5)
d<-data.frame(Time,
x1= rpois(n = 5, lambda = 10),
x2= runif(n = 5, min = 1, max = 10),
x3= rpois(n = 5, lambda = 5),
x4= runif(n = 5, min = 1, max = 5))
和c=c(1,1,2,3)
解决方案
您走在正确的道路上,但是您需要使用一些不同的结构ggplot
:
# delete old color column
d$c <- NULL
# reshape df
plot.d <- reshape2::melt(d, id.vars = c("Time"))
# create new, correct color column
plot.d$c <- NA
plot.d$c[plot.d$variable == "x1"] <- 1
plot.d$c[plot.d$variable == "x2"] <- 1
plot.d$c[plot.d$variable == "x3"] <- 2
plot.d$c[plot.d$variable == "x4"] <- 3
# plot
ggplot(plot.d, aes(x=Time, y=value, color=as.factor(c), group = variable))+
geom_line() +
labs(color='class')+
scale_color_manual(values=c('red','blue','green'))
请注意,为简洁起见,我省略了标签,但您可以使用相同的逻辑将它们添加回来。上面的代码给出了以下结果:
推荐阅读
- python - 将 end= 添加到 print() 时,time.sleep 无法按预期工作
- reactjs - React 中的 Typography 组件到底是什么?
- node.js - 在循环nodejs中返回API请求
- javascript - php项目未捕获TypeError:Ajax不是函数
- c++ - 对智能指针向量使用 push_back 方法时应用程序崩溃
- django - 不要在 Django 中更新头像图像
- ios - 由于证书有效性,SecTrustEvaluate 失败
- php - 如何从 PHP 中的数组中获取值?
- database - 如何使用区块链存储数据
- c - JNIEnv->CallStaticObjectMethod 上的 SIGSEGV