R 当数据中不存在分组变量的所有级别时,图之间的颜色比例和图例保持一致

R 当数据中不存在分组变量的所有级别时,图之间的颜色比例和图例保持一致,r,variables,colors,ggplot2,R,Variables,Colors,Ggplot2,我有数据,这些数据被依次添加到R中的data.frame。我经常创建显示结果的绘图。根据某些标准对绘图进行颜色编码,其中一些标准从未达到,因此图表上没有这种颜色 比如说, library(ggplot2) dates15=seq(as.POSIXct("2015-01-01 00:00:00"), as.POSIXct("2015-06-30 23:45:00"), by="15 min") ex.data=rnorm(length(dates15),2,1) blue=c(1:5000) pi

我有数据,这些数据被依次添加到R中的
data.frame
。我经常创建显示结果的绘图。根据某些标准对绘图进行颜色编码,其中一些标准从未达到,因此图表上没有这种颜色

比如说,

library(ggplot2)
dates15=seq(as.POSIXct("2015-01-01 00:00:00"), as.POSIXct("2015-06-30 23:45:00"), by="15 min")
ex.data=rnorm(length(dates15),2,1)
blue=c(1:5000)
pink=which(ex.data>50)
purple=c(10000:15000)
colours=rep("Black points", length(dates15))
colours[blue]="Blue Points"
colours[pink]="Pink points"
colours[purple]="Purple points"
all.data=data.frame(Date=dates15, Data=ex.data, Colours=colours)
g.cols=c("black", "blue", "pink", "purple")
ggplot(all.data, aes(Date, Data, colour=Colours, group=1))+geom_line()+scale_color_manual(values=g.cols)+
  xlim(as.POSIXct("2015-01-01 00:00:00"), as.POSIXct("2015-02-12 23:45:00"))

在本例中,我将变量pink设置为仅大于50的点(这在我的数据中显然是不可能的)。因此,当创建绘图时,“
粉红色
”图例名称将丢失,但粉红色已指定给紫色标签。我希望颜色和标签始终保持匹配,即使存在未使用的变量。

设置
颜色的因子级别
以包括所有可能的值,无论是否存在于手头的数据中,然后将
drop=FALSE
添加到
缩放颜色\u手册

all.data=data.frame(Date=dates15, Data=ex.data, Colours=colours)
g.cols=c("black", "blue", "pink", "purple")
all.data$Colours = factor(all.data$Colours, levels=sort(c(unique(colours), "Pink Points")))

ggplot(all.data, aes(Date, Data, colour=Colours, group=1)) + 
  geom_line() +
  scale_color_manual(values=g.cols, drop=FALSE) +
  xlim(as.POSIXct("2015-01-01 00:00:00"), as.POSIXct("2015-02-12 23:45:00"))

这太完美了!谢谢:)