2017-09-28 8 views
1

Der Code zuerst:tmap Paket: mehrere tm_text() Farben abhängig vom gleichen tm_fill machen() Wert

library(tmap) 
library(tmaptools) 

data("Europe") 

# subset just three countries for illustration 
threeC <- Europe[Europe$sovereignt %in% c("Germany", "Poland", "Ukraine"), ] 

tm_shape(threeC) + 
    tm_polygons() + 
    tm_shape(threeC) + 
    tm_borders() + 
    tm_fill("pop_est", 
      palette = get_brewer_pal("YlGnBu"), 
      legend.show = F, 
      style = "order") + 
    tm_text("sovereignt", size = .8) + 
    tm_shape(threeC) + 
    tm_text("pop_est", size = .8, auto.placement = .1) 

Das Ergebnis ist: 3 countries with text labels

Frage 1: Ist es möglich, die "zu zeigen pop_est "Zahlen in der Map in Millionen mit 2 Dezimalstellen wie: 82.32m, 38.48m, 45.70m mit Hilfe einer Formel in der Funktion tm_text() (dh ohne eine weitere benutzerdefinierte Spalte im Datenframe zu erstellen und diese dann anstelle von" pop_est ")?

Frage 2: Die Farbe von Text mit Ländernamen ist entweder schwarz oder weiß (hier wird "Deutschland" in weiß gedruckt und zwei andere Ländernamen werden in schwarz gedruckt), abhängig von der Füllfarbe, was die Sichtbarkeit in großen Karten erheblich erleichtert . Aber die Farbe von zusätzlichem Text mit "pop_est" -Figuren ist immer schwarz. Wie kann es abhängig von der Füllfarbe auch schwarz oder weiß gemacht werden, um die Sichtbarkeit zu verbessern?

Antwort

0

Antwort 1: Nach einigen Experimenten scheint es, als gäbe es keine Möglichkeit, es zu tun ist, vorher eine benutzerdefinierte Spalte ohne zu erstellen:

threeC$pop_est.m <- (threeC$pop_est/1e6) %>% sprintf("%.2f", .) %>% paste0("m") 

Antwort 2: verwenden Sie eine andere tm_fill Funktion mit allen bisherigen Optionen und Addtionally es machen transparent von alpha = 0.

So ist der überarbeitete Code wäre:

library(tmap) 
library(tmaptools) 

data("Europe") 

# subset just three countries for illustration 
threeC <- Europe[Europe$sovereignt %in% c("Germany", "Poland", "Ukraine"), ] 
threeC$pop_est.m <- (threeC$pop_est/1e6) %>% sprintf("%.2f", .) %>% paste0("m") 

tm_shape(threeC) + 
    tm_polygons() + 
    tm_shape(threeC) + 
    tm_borders() + 
    tm_fill("pop_est", 
      palette = get_brewer_pal("YlGnBu"), 
      legend.show = F, 
      style = "order") + 
    tm_text("sovereignt", size = .8) + 
    tm_shape(threeC) + 
    tm_fill("pop_est", 
      palette = get_brewer_pal("YlGnBu"), 
      legend.show = F, 
      style = "order", 
      alpha = 0) + # make it transparent 
    tm_text("pop_est.m", size = .8, auto.placement = .1) 

der das gewünschte Ergebnis: custom map

Verwandte Themen