r凹凸/坡度图表设置自定义厚度和颜色
考虑一个数据框架,如下所示,其中有5个项目在3个时间点排名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
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)
我想用几种方法来处理此图:
表示变更级别的任何其他想法都是受欢迎的(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")