ggplot2,线条堆叠顺序用于变量的美学映射

6

我有这样一个情况,我正在绘制一系列线条,类似于以下内容:

library(foreach)
library(ggplot2)

df.test <- foreach(ix = seq(0,1,by=0.01),.combine=rbind) %do% {
  theta = seq(-pi,pi,by=pi/100)
  data.frame(IX=ix,theta=theta,value=ix*sin(theta))
}
ggplot(df.test,aes(x=theta,y=value,color=IX,group=IX,order=-IX)) + geom_path() +
  theme_bw() + labs(x="Theta",y="Sin(Theta)",color="Index",title="Example Plot") +
  theme(legend.position=c(0,1),legend.justification=c(0,1))

产生以下图表:

Sample

如果您仔细观察原点,高指数值(浅蓝色)的值堆叠在低指数值(深蓝色)的线上。
我该如何才能将其反转,使低指数的深蓝色线条堆叠在高指数的浅蓝色线条之上?
以上类似于我的实际问题,我正在为不同温度绘制科学数据。低温值比高温值更有意义,因此我不希望低温线条被潜在地高温线条掩盖,事实上相反是我的首选。
2个回答

2

我认为你只需要将颜色美学改为rev(IX),这将反转排序,你不需要使用grouporder

ggplot(df.test, aes(x=theta, y=value, color=rev(IX))) + ...

enter image description here


2
我认为反转组的顺序应该可以解决问题(不改变颜色)。
ggplot(df.test,aes(x=theta,y=value,color=IX,group=rev(IX))) + 
    geom_path(lwd=2) +
    theme_bw() + 
    labs(x="Theta",y="Sin(Theta)",color="Index",title="Example Plot") +
    theme(legend.position=c(0,1),legend.justification=c(0,1)) + 
    coord_cartesian(xlim=c(-0.2,0.2), ylim=c(-0.2,0.2))

enter image description here


就是这样。完美。干杯。 - Nicholas Hamilton
1
如果组内的点数不相同怎么办?我认为group=-IX是一个更通用的数字解决方案,而对于因子,则是group=factor(f, levels=rev(levels(f))) - Ryan C. Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接