Více

Zobrazit dvourozměrný barevný přechod pro dvě různé veličiny

Zobrazit dvourozměrný barevný přechod pro dvě různé veličiny


Mám dvě překrývající se rastrové vrstvy. Jeden obsahuje množství A od 0 do 100 a druhý obsahuje množství B od 0 do 100. Chtěl bych vytvořit mapu zobrazující obě sady dat najednou na základě barevného pole se dvěma různými osami.

Takže pro oblast, kde:

  • A je 100 a B je 100, mapa by byla červená
  • A je 100 a B je 0, byla by žlutá
  • A je 0 a B je 100, bylo by to zelené
  • A je 0 a B je 0, bylo by to modré

Pro střední hodnoty by se odstín odpovídajícím způsobem změnil, takže A = 100, B = 50 by bylo oranžové; A = 50, B = 0 by bylo modrozelené.

Už jsem viděl, jak mapy zobrazují tento typ dat, a mám několik věcí, které bych rád zobrazil tímto způsobem. Jaký je nejjednodušší způsob? Mohu použít ArcGIS, QGIS a R.


To, co se snažíte vytvořit, je známé jako dvojrozměrná mapa. Existuje několik způsobů, jak to udělat, ale protože už máte rastrová data, která se opírají o určité metody. Velkou věcí budou vaše výběry barev a nejsem si jistý, jak přesně dosáhnout míchání, které si přejete.

Obvykle se to děje se dvěma barvami, jednou pro každou proměnnou. Takže A 0 = bílá, A 100 = modrá, B 0 = bílá a B 100 = červená. Pak byste spojili dva rastry a získali odstíny fialové, kde jsou oba vysoké, bílé, kde oba jsou nízké, a barvu nakloněnou k červené nebo modré, kde jeden je větší než druhý.

To lze přizpůsobit dvěma barevným osám. A 0 je žlutá, A 100 je červená a B 0 je zelená s B 100 modrá. Ale pak můžete začít dostávat blátivé hodnoty uprostřed, v závislosti na vašich barvách. V tomto případě jsou A a B 100 fialové, zatímco A a B 0 jsou žlutozelené. A 0 a B 100 budou šedé, zatímco A 100 a B 0 budou olivové.

S pouhými třemi primárkami jsou směsi celkem čisté. Ten čtvrtý to ale komplikuje. Podle vaší otázky, jak A a B 0 by byla modrá, A 100 by byla žlutá, B 100 je zelená a obě A a B 100 je červená. To opravdu nefunguje, protože žlutá a zelená nejsou červené. A žlutá plus střed zelené a modré nejsou oranžové.

Myslím, že budete mít lepší výsledky, pokud si vyberete jen dvě barvy. Mohli byste dokonce utéct se třemi (obě mají stejnou primární barvu nízkou nebo vysokou, ale každá má jinou primární barvu pro druhý konec rozsahu). Ale základní princip je stejný. Symbolizujete každý ze svých rastrů požadovanou barevnou rampou, exportujete / uložíte je do vybarveného rastru a poté tyto dva vybarvené rastry spojíte a spojíte, abyste získali konečný dvojrozměrný rastr. Existují také různé přístupy ke sloučení / směšování a některý software poskytuje více možností než ostatní. Může to být například směs průhlednosti nebo doplňková směs barev.

U této otázky existuje příklad specifické metody využívající gdal.


Pokud byste to chtěli udělat v R, možná se budete chtít podívat na blogový příspěvek od Oscara Perpiñána Lamigueira. Není to přesně to, co hledáte, ale může existovat způsob, jak jej upravit tak, aby fungoval pro vaše účely.

V mém posledním příspěvku jsem popsal, jak vytvořit vícerozměrnou choroplethovou mapu s R. Nyní ukážu, jak vytvořit mapu z rastrových souborů. Jedním z nich je faktor, který bude seskupovat hodnoty druhého. Opět tedy položím několik skupin na stejnou mapu.

Přidání:

Může to být trochu pozdě, ale myslel jsem si, že to přidám, protože to vypadá jako relativně jednoduché řešení vašeho problému.

V R, když používátespiknutí()pro zobrazení rastrů existujealfaargument, který nastavuje průhlednost. Pokud jste vykreslili své dvě proměnné jako různé barevné rastry s barevnými škálami od světlé po tmavou a každoualfaargument nastaven na něco jako 0,5, barvy by se kombinovaly tam, kde se překrývají.

Udělal jsem to sprostorové polygonypoužitímspplottaké. Představuji si, že by to fungovalo stejně i pro rastry. Zde je příklad sprostorové polygony:

knihovna (sp) knihovna (rgeos) knihovna (rworldmap) box <- readWKT ("POLYGON ((- 180 90, 180 90, 180 -90, -180 -90, -180 90))") proj4string (box) <- CRS ("+ proj = cea + datum = WGS84") set.seed (1) pts <- spsample (box, n = 2000, type = "random") pols <- gBuffer (pts, byid = TRUE, width = 50 ) # vytvoření kruhových polyů kolem každého bodového sloučení = vzorek (1:40, 100, nahrazení = T) # vytvoření vektoru rand # s mezi 0-100 ke sloučení polů na Sp.df <- gUnionCascaded (pols, id = sloučení) # kombinujte polygony se stejnou hodnotou „sloučení“ # vytvořte SPDF pomocí polygonů a náhodně přiřaďte každému 1 nebo 2 v @data df Sp.df <- SpatialPolygonsDataFrame (Sp.df, data.frame (z = factor (sample (1 : 2, length (Sp.df), replace = TRUE)), row.names = unique (merge))) Sp.df <- crop (Sp.df, box) colors <- c (rgb (r = 0, g = 0, modrá = 220, alfa = 50, max = 255), rgb (r = 220, g = 0, b = 0, alfa = 50, max = 255)) land <- getMap () overlay.map < - spplot (Sp.df, zcol = "z", col.regions = barvy, col = NA, alfa = 0,5, zlomy = c (0,1)) + vrstva (sp.polygony (land, fill = "transparentní") , col = "grey50"))

Je zřejmé, že legenda není pro tuto mapu příliš užitečná. Chcete-li vytvořit legendu, musíte vykreslit přechody do čtverce, přičemž jeden se zvětšuje zleva doprava a druhý se zvětšuje zdola nahoru.

Nějaký kód, jak to udělat v základní grafice, je zde: https://stackoverflow.com/a/11103414/3897439.

Také jsem to udělal pro dvě barvy pomocíggplotjak jsem potřeboval mřížkovou grafiku. Zde je jednoduchý příklad:

Variabilní_A <- 100 # max proměnné Variabilní_B <- 100 x <- tavenina (vnější (1: Variabilní_A, 1: Variabilní_B)) # nastavit datový rámec pro vykreslení z p <- ggplot (x) + theme_classic () + scale_alpha (range = c (0,0.5), guide = "none") + geom_tile (aes (x = Var1, y = Var2, fill = "Variable_A", col.regions = "red", alpha = Var1)) + geom_tile (aes (x = Var1, y = Var2, fill = "Variable_B", col.regions = "blue", alpha = Var2)) + scale_x_continuous (limits = c (0, Variable_A), expand = c (0, 0) ) + scale_y_continuous (limits = c (0, Variable_B), expand = c (0, 0)) + xlab ("Variable_A") + ylab ("Variable_B") + průvodce (fill = FALSE) p

Není to dokonalé, ale může fungovat pro vaše účely.

Dalším zdrojem, který může obsahovat zajímavé informace týkající se vašeho úkolu, je: http://andrewpwheeler.wordpress.com/2012/08/24/making-value-by-alpha-maps-with-arcmap/.


Podívejte se na video: Vlčata útočí na přechod pro chodce