Eu gostaria de traçar uma lenda com dois eixos. Especificamente, eu combinei dois objetos espaciais que foram classificados, o primeiro mostrando a intensidade de um evento e o segundo mostrando a probabilidade do evento naquele local. Quero criar uma legenda que mostre onde os pixels da varredura combinada se enquadram em cada categoria. A legenda que eu gostaria de criar ficaria assim: Legenda com dois eixos .
A legenda normal dos dados classificados é assim: Legenda original
Aqui está um exemplo reproduzível do tipo de dados que estou usando:
library(raster)
library(rasterVis)
# setseed
set.seed(999)
# create raster (example of what would be the outcome of combining intensity and probability rasters)
plot.me<- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40)
val <- c(100:104, 200:204, 300:304, 400:404)
plot.me<- setValues(plot.me, sample(val,ncell(plot.me),replace=T))
###### Plotting
plot.me <- ratify(plot.me)
levelplot(plot.me,att="ID" ,
col.regions=c("#beffff","#73dfff","#d0ff73","#55ff00",
"#73b2ff","#0070ff","#70a800","#267300",
"#f5f57a","#ffff00","#e8beff","#df73ff",
"#f5ca7a","#ffaa00","#e600a9","#a80084"))
A maneira mais fácil seria criar o enredo e adicionar a legenda mais tarde em um editor gráfico ... mas tenho certeza de que deve haver uma maneira de fazer isso no próprio R! Atualmente, estou plotando com o pacote rasterVis, mas se houver respostas no ggplot ou na base R, elas serão igualmente bem-vindas.
Se for mais útil ter um exemplo reproduzível das etapas intermediárias (ou seja, com os rasters de intensidade / probabilidade), deixe-me saber e eu posso produzi-los.
rasterVis
eu produzi esta imagem . Se é isso que você está procurando, tente o código disponível aqui (seção "Lenda da bivariada)."Reduce
e+.trellis
.Respostas:
Uma solução será fazer dois gráficos e combiná-los usando a
grid.arrange
função dogridExtra
pacote, por exemploPrimeiro, eu converto seu rasterLayer em um ajuste usando a função postada neste post: Sobrepor a camada raster no mapa no ggplot2 no R?
(PS: modifiquei seu
val
objeto para criar apenas 16 cores diferentes que correspondam ao padrão de cores que você forneceu. No seu exemplo,val
possui 20 valores diferentes)Em seguida, crio o primeiro gráfico, o mapa de calor usando
geom_tile
:Em seguida, crio um quadro de dados separado para a legenda:
Agora, eu fiz o enredo da lenda:
E, finalmente, eu os combino:
Parece o que você está tentando obter?
NB: Você provavelmente pode plotar diretamente seu objeto raster,
ggplot2
mas eu não tinha certeza do procedimento exato. Além disso, você pode brincar com o layout degrid.arrange
, a fim de fazer o enredo parecer exatamente o que você desejafonte