r凹凸/坡度图表设置自定义厚度和颜色

r凹凸/坡度图表设置自定义厚度和颜色,r,ggplot2,R,Ggplot2,考虑一个数据框架,如下所示,其中有5个项目在3个时间点排名 item<-rep(c(1:5),3) time<-rep(c('a','b','c'),15) rank<-round(runif(15,2,10),1) stack<-as.data.frame(cbind(item,time,rank)) 我是这样画的 ggplot(data = stack, aes(x = time, y = rank, group = item)) + geom_line(aes

考虑一个数据框架,如下所示,其中有5个项目在3个时间点排名

item<-rep(c(1:5),3)
time<-rep(c('a','b','c'),15)
rank<-round(runif(15,2,10),1)
stack<-as.data.frame(cbind(item,time,rank))
我是这样画的

ggplot(data = stack, aes(x = time, y = rank, group = item)) +
  geom_line(aes(color = item, alpha = 1), size=2 )+
  geom_point(aes(color = item, alpha = 1), size = 4)

我想用几种方法来处理此图:

  • 我希望能够通过数据的大小来显示变化的大小 线,因此较粗的线代表较大的变化,但我希望对每个时间点a-b和b-c都这样做
  • 我想用同样的颜色来表示,正的变化是一条绿线,负的变化是一条红线,同样,这应该是在每个时间点a-b,b-c
  • 到目前为止,我只能改变整体颜色或厚度,而不是间隔a-b和b-c


    表示变更级别的任何其他想法都是受欢迎的(alpha是一个选项)

    首先,快速更改样本数据,使其完全可复制

    item<-factor(rep(c(1:5),3))
    time<-rep(c('a','b','c'),15)
    rank<-round(runif(15,2,10),1)
    stack<-data.frame(item,time,rank)
    
    这就像你期待的那样,但不可否认有点可怕。你可以玩弄颜色和尺寸,直到你得到满意的东西,或者使用alpha作为公认的aes,但总的来说,我建议你考虑另一种选择。凹凸图的目的是便于跟踪多个时段或维度的相对位置变化。通过改变颜色和大小的方向,你实际上更难跟踪你在哪一行通过时间。我认为你最初的方法更具视觉意义。稍微调整一下,你会得到如下结果:

    ggplot(stack, aes(x = time, y = rank, group = item)) +
      geom_line(aes(colour = item)) +
      geom_point(aes(colour = item), size = 4) +
      geom_point(colour = "black", pch = 1, size = 4) +
      geom_label(data = stack %>% 
                   filter(time == "c"),aes(label = item,
                                           fill = item)) +
      theme_minimal() +
      scale_fill_discrete(guide = FALSE) +
      scale_colour_discrete(guide = FALSE) +
      labs(x = "Time", y = "Rank")
    

    eesh,那看起来真是太可怕了!但是谢谢你告诉我这是可能的。第二个选项看起来更好。在我接受之前,我只是意识到时间和项目没有意义,相反,它应该是时间。对于其他人来说,我发现它是一个非常好的包,可以使用“newggslopegraph”函数制作漂亮的坡度图。
    library(dplyr)
    stack <- stack %>% 
      group_by(item) %>% 
      mutate(delta = rank-lag(rank),
             direction =  ifelse(delta >  0, "Positive","Negative"))
    
    ggplot(stack, aes(x = time, y = rank, colour = direction, group = item)) +
      geom_line(aes(size = delta)) +
      geom_point(colour = "black") +
      scale_colour_manual(values = c("green","red"))
    
    ggplot(stack, aes(x = time, y = rank, group = item)) +
      geom_line(aes(colour = item)) +
      geom_point(aes(colour = item), size = 4) +
      geom_point(colour = "black", pch = 1, size = 4) +
      geom_label(data = stack %>% 
                   filter(time == "c"),aes(label = item,
                                           fill = item)) +
      theme_minimal() +
      scale_fill_discrete(guide = FALSE) +
      scale_colour_discrete(guide = FALSE) +
      labs(x = "Time", y = "Rank")