首页 > 解决方案 > 许多具有不同颜色的曲线的简单图

问题描述

我有以下数据框,除了标签向量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",其中每条曲线都根据标签着色。所以曲线x1x2用相同的颜色着色,因为它们具有与曲线相同的标签并且具有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绿色。x2x3x4


添加:我想在以下一般情况下获得与上面相同的图,其中我无法将向量添加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)

标签: rggplot2plot

解决方案


您走在正确的道路上,但是您需要使用一些不同的结构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'))

请注意,为简洁起见,我省略了标签,但您可以使用相同的逻辑将它们添加回来。上面的代码给出了以下结果:

ggplot2 结果


推荐阅读