Hilfe bei der Auswahl des am besten geeigneten Farbschemas für die bivariate Choroplethen-Zuordnung

10

Ich versuche, eine nominelle Variable (2 Kategorien - Regenfutter vs. Bewässert) in einer Choroplethenkarte über eine numerische Variable zu legen.

Geben Sie hier die Bildbeschreibung ein

Um den Unterschied im Muster zwischen den beiden Kategorien hervorzuheben, habe ich eine Kategorie mit einer anderen Farbe (bewässerte Bereiche in "rot") umrissen, während die ungefärbten Bereiche Regenfelder sind.

Die Karte fühlt sich jedoch unübersichtlich an und der Umriss wird mit dunkleren Schattierungen der numerischen Variablen gemischt.

Ich versuche zu vermeiden, zwei verschiedene Farbschattierungsschemata zu verwenden, um die beiden Kategorien darzustellen, da ich der Meinung bin, dass dies die Gesamtverteilung der zugrunde liegenden Variablen verbergen würde.

Gibt es eine bessere Möglichkeit, diese bivariate Klassifizierung mithilfe des ggplots2-Pakets in R darzustellen (das ich derzeit zum Erstellen der angehängten Karte verwende)?

Diese Karten werden schließlich auf Papier gedruckt.

varungoel123
quelle
Berechnen Sie die euklidische Entfernung an den Grenzen des Bewässerungsgebiets. Weitere Details hier: gis.stackexchange.com/q/53163/8104
Aaron
@Aaron, danke für den Link, Directional Shading könnte dafür funktionieren, und ich könnte das Pufferwerkzeug verwenden, um diese Bereiche in R zu zeichnen. Mein einziges Problem wäre jedoch die vergleichsweise geringe Größe der Polygone, die durch die Breite verfälscht werden könnten Umrisse. Ich werde das ausprobieren.
Varungoel123
@ varungoel123 Ich habe eine R-Lösung mit den Paketen rasterund veröffentlicht rasterVis, die Sie interessieren könnten.
Thiagoveloso

Antworten:

7

Anstelle von Umrissen zur Angabe der bewässerten Bereiche sollten Sie ein transparentes Füllmuster (z. B. Linien, Hachuren) verwenden. Ein Beispiel würde ähnlich aussehen:

http://www.geog.fu-berlin.de/de/Karto/umn_karten/bilder/komb2.png

oder googeln Sie einfach "Kartenfüllmuster", um einen Überblick über die Optionen zu erhalten. Die Verwendung von Konturen nur für die bewässerten Gebiete würde den Eindruck erwecken, dass die Bewässerung kein kontinuierliches Phänomen ist.

Chris P.
quelle
Das ist ein großartiger Vorschlag. Gibt es eine Möglichkeit, dies in ggplot2 oder einem anderen Paket in R zu tun? Ich habe ungefähr 60-70 Karten, auf denen die Abgrenzung von Regen- und Bewässerungsgebieten konstant bleibt. Mit ggplot2 konnte ich die Kartenproduktion automatisieren, was ich mit ArcMap oder Qgis
varungoel123
Ich bin nicht mit ggplot2 oder R vertraut. Dieses Füllmuster ist jedoch eine ziemlich übliche Sache und sollte nicht zu schwer zu erreichen sein. Ich weiß, wie man das in Qgis oder ArcMap macht. In beiden Programmen können Sie diesen Stil speichern, sobald Sie ihn definiert und wiederverwendet haben. Automatisierung sollte mit beiden durchaus möglich sein. Ein Python-Skript oder Arcpy könnte die Arbeit für Sie erledigen.
Chris P
1
Leider ist ggplot nicht gut in Füllmustern (aber siehe hier für eine Alternative)
cengel
QGis in Version 2.0.1 bietet auch automatisierte Kartenproduktion
Zbynek
1

Ich musste kürzlich eine ähnliche Karte machen. Die Lösung, die ich mir ausgedacht habe, verwendet das rasterVis-Paket anstelle von ggplot2 (was übrigens ein fantastisches Paket ist).

In meinem Fall hatte ich eine Karte der Trends über die Zeit (was auch eine numerische Variable ist) und auch eine Karte, die die Signifikanz des Trends zeigt (erhalten aus einem statistischen Test).

In meinem Fall wollte ich die Signifikanzkarte über die numerische Karte zeichnen, ähnlich einem "Punktierungsmuster", um zu zeigen, wo das Konfidenzniveau höher war.

Dies ist ungefähr der Code, mit dem ich die Karte erstellt habe.

require(raster)
require(rasterVis)

# Scratch raster objects
data(volcano)
r1 <- raster(volcano)

over <- ifelse(volcano >=160 & volcano <=180, 1, NA) # This is the "mask" raster
r2 <- raster(over)

# And this is the key step:
# To convert the "mask" raster to spatial points
r.mask <- rasterToPoints(r2, spatial=TRUE)

# Plot
levelplot(r1, margin=F) +
layer(sp.points(r.mask, pch=20, cex=0.3, alpha=0.8))

In Ihrem Fall können Sie den Code ändern, indem Sie:

1) Erstellen eines "binären" Rasters, in dem beispielsweise 0 mit Regen und 1 mit Bewässerung behandelt wird, und Plotten wie bei mir oder;

2) Erstellen Sie zwei verschiedene Masken, eine für Regenfutter und eine für Bewässerung, und zeichnen Sie beide als unterschiedliche Objekte (z. B. Kreise für Regenfutter und Kreuze für Regenfutter).

Ich denke, die zweite Alternative würde die Karte zu visuell "verschmutzt" erscheinen lassen, aber Sie können die Parameter der Punkte immer steuern, indem Sie die spPaketdokumentation konsultieren - speziell ?sp.points.

Ich hoffe es hilft.

thiagoveloso
quelle