Ich möchte eine Legende mit zwei Achsen zeichnen. Insbesondere habe ich zwei klassifizierte räumliche Objekte kombiniert, wobei das erste die Intensität eines Ereignisses und das zweite die Wahrscheinlichkeit des Ereignisses an diesem Ort zeigt. Ich möchte eine Legende erstellen, die zeigt, wo die Pixel des kombinierten Rasters in jede Kategorie fallen. Die Legende, die ich erstellen möchte, sieht ungefähr so aus: Legende mit zwei Achsen .
Die normale Legende der klassifizierten Daten sieht folgendermaßen aus: Originallegende
Hier ist ein reproduzierbares Beispiel für die Art der Daten, die ich verwende:
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"))
Zeichnen Sie die Ausgabe von oben
Der einfachste Weg wäre, den Plot zu erstellen und die Legende später in einem Grafikeditor hinzuzufügen ... aber ich bin sicher, dass es einen Weg geben muss, dies in R selbst zu tun! Ich plane derzeit mit dem rasterVis-Paket, aber wenn es Antworten in ggplot oder base R gibt, sind diese gleichermaßen willkommen.
Wenn es sinnvoller wäre, ein reproduzierbares Beispiel für die Zwischenschritte (dh mit den Intensitäts- / Wahrscheinlichkeitsrastern) zu haben, lassen Sie es mich wissen und ich kann diese erstellen.
rasterVis
ich dieses Bild produziert . Wenn Sie danach suchen, probieren Sie den hier verfügbaren Code aus (Abschnitt "Bivariate Legende).Reduce
und reduziert+.trellis
.Antworten:
Eine Lösung besteht darin, zwei Diagramme zu erstellen und diese beispielsweise mithilfe der
grid.arrange
Funktion aus demgridExtra
Paket zu kombinierenZuerst konvertiere ich Ihren rasterLayer mithilfe der in diesem Beitrag veröffentlichten Funktion in einen Tibble: Überlagern Sie den Raster-Layer auf der Karte in ggplot2 in R?
(PS: Ich habe Ihr
val
Objekt so geändert, dass nur 16 verschiedene Farben zu dem von Ihnen angegebenen Farbmuster passen. In Ihrem Beispielval
hat es 20 verschiedene Werte.)Dann erstelle ich das Faustdiagramm, die Heatmap mit
geom_tile
:Dann erstelle ich einen separaten Datenrahmen für die Legende:
Jetzt habe ich die Handlung für die Legende gemacht:
Und schließlich kombiniere ich sie:
Sieht es so aus, wie Sie es bekommen wollen?
NB: Sie können Ihr Rasterobjekt wahrscheinlich direkt zeichnen,
ggplot2
aber ich war mir nicht sicher, wie genau es ablaufen soll. Sie können auch mit dem Layout von spielengrid.arrange
, damit die Handlung genau so aussieht, wie Sie es möchtenquelle