r - ggplot如何在绘制栅格时为不存在的整数设置填充值
问题描述
我在 (Z) 中将整数值绘制为光栅文件。在 Z 值中,数字 6 不存在,但是我希望为它分配填充颜色并在图例中显示它。我该怎么做? 下面是数据,其中X和Y对应经度和纬度..
X Y Z
84 75.75 12.50 7
85 76.00 12.50 5
86 76.25 12.50 5
87 76.50 12.50 2
88 76.75 12.50 7
89 77.00 12.50 4
100 75.75 12.25 2
101 76.00 12.25 4
102 76.25 12.25 2
103 76.50 12.25 3
104 76.75 12.25 2
105 77.00 12.25 4
116 75.75 12.00 1
117 76.00 12.00 1
118 76.25 12.00 2
119 76.50 12.00 3
120 76.75 12.00 2
121 77.00 12.00 5
132 75.75 11.75 1
133 76.00 11.75 0
134 76.25 11.75 1
135 76.50 11.75 0
136 76.75 11.75 1
137 77.00 11.75 0
148 75.75 11.50 1
149 76.00 11.50 0
150 76.25 11.50 1
151 76.50 11.50 2
152 76.75 11.50 2
153 77.00 11.50 4
我曾尝试使用以下代码..
[![p1 <-ggplot(XYZ.1)+ geom_raster(aes(X,Y,fill=Z)) +
coord_equal()+theme_bw()+xlab("")+ylab("") +
scale_fill_manual(values = c("grey50", "#f7f7f7", "#80b1d3","#7fc97f","#ffff99","#beaed4","#f0027f"),name= "Integer", guide = guide_legend(reverse = TRUE)) +
scale_x_continuous(breaks=seq(75.625,77.125, 0.25), labels=c(paste(seq(75.625,77.125, 0.25),"°E", sep="")),expand = c(0, 0))+
scale_y_continuous(breaks=seq(11.375,12.625,0.25), labels=c(paste(seq(11.375,12.625,0.25),"°N", sep="")),expand = c(0, 0)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1),panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) +
theme(plot.title = element_text(hjust = 0.5,size = 10, face = "plain"),legend.title=element_text(size=10),legend.text=element_text(size=9))][1]][1]
1:
解决方案
定义Z
为从 0 到 7 的因子并使用drop=FALSE
inside scale_fill_manual
:
XYZ.1$Z <- factor(XYZ.1$Z, levels=0:7)
p1 <- ggplot(XYZ.1)+ geom_raster(aes(X,Y,fill=Z)) +
coord_equal() + theme_bw() + xlab("") + ylab("") +
scale_fill_manual(values = c("grey50","#f7f7f7","#80b1d3","#7fc97f","#ffff99",
"#beaed4","red","#f0027f"),
name= "Integer", guide=guide_legend(reverse=TRUE), drop=FALSE) +
geom_polygon(data=shp.Kabini.basin.bndry, aes(long,lat,group=group),
colour="black", fill=NA)+
scale_x_continuous(breaks=seq(75.625,77.125, 0.25),
labels=c(paste(seq(75.625,77.125, 0.25),"°E", sep="")),expand = c(0, 0))+
scale_y_continuous(breaks=seq(11.375,12.625,0.25),
labels=c(paste(seq(11.375,12.625,0.25),"°N", sep="")),expand = c(0, 0)) +
theme(axis.text.x = element_text(angle = 90, hjust = 1),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank()) +
theme(plot.title = element_text(hjust = 0.5,size = 10, face = "plain"),
legend.title=element_text(size=10), legend.text=element_text(size=9))
print(p1)
推荐阅读
- spring-boot - Selenium-Jupiter 通用 webdriver 设置未应用
- ssms - 只有在关闭查询窗口后才提交事务,为什么?
- c++ - 推导的模板 arg 和自动 arg 之间有什么区别吗?
- lisp - 使用从字符串读取时如何处理文件结尾错误?
- json - 在 Powershell 中迭代来自 API 的 JSON 响应
- android - 使用相同的代码获取资源未找到异常资源 id 0x0
- bash - 如何在不使用 sed、grep、awk、find 的情况下从另一个文件导入行并将它们放入当前脚本中的变量中?
- python - 如何在 lambda.apply 函数中应用嵌套 for 循环来迭代数据帧中的列,下图中的预期输出
- asp.net - 从(本地)Windows 身份验证更改为 ADFS
- asp.net-core - .Net Core / Identity Server - 是否可以允许匿名但只能来自我的客户?