我正在尝试使用 ggplot2“geom_raster”函数将两个 data.frame 绘制为两层。顶层包含设置为“透明”的 NA 值,以使底层可见。由于 scale_fill_xxx 函数不能使用两次,我尝试了以下代码(基于这篇文章:ggplot2 - using two different color scales for overlay plots):
library(ggplot2)
df1 <- data.frame(x=rep(c(1,2,3),times=3), y=c(1,1,1,2,2,2,3,3,3), data= c(NA,4,9,NA,2,7,NA,NA,3))
df2 <- data.frame(x=rep(c(1,2,3),times=3), y=c(1,1,1,2,2,2,3,3,3), data= c(1,NA,NA,2,NA,NA,1,2,NA))
ggplot() +
geom_raster(data=df1, aes(y= y, x= x, fill= data)) +
scale_fill_gradientn(name="df1", colours=c("red", "blue"), na.value = "transparent") +
geom_raster(data= df2, aes(y= y, x= x, colour= as.factor(data))) +
scale_colour_manual(values = c("green", "black"), name= "df2", labels= c("Class 1", "Class 2"), na.value="transparent")
问题是“颜色”/“scale_colour_manual”解决方案没有返回我所期望的(它返回一个深灰色图)。我希望df1“数据”列以红色到蓝色的比例表示(NA应该是透明的),df2“数据”列根据类号表示(“1”=绿色和“2”=黑色)。
谁能帮助我了解我的程序有什么问题?