2017-09-28 3 views
1

Le premier code:package TMAP: faire de valeurs multiples couleurs dépendant même tm_fill() tm_text()

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) 

Le résultat est: 3 countries with text labels

Question 1: Est-il possible de montrer la " pop_est "figure dans la carte en millions avec 2 décimales comme: 82.32m, 38.48m, 45.70m en utilisant une formule dans la fonction tm_text() (c.-à-d., sans créer une autre colonne personnalisée dans la dataframe et l'utiliser au lieu de" pop_est ")? Question 2: La couleur du texte indiquant les noms de pays est soit noir ou blanc (ici "Allemagne" est imprimé en blanc et les deux autres noms de pays sont imprimés en noir) en fonction de la couleur de remplissage qui aide grandement la visibilité sur les grandes cartes . Mais la couleur du texte additionnel montrant les figures "pop_est" est toujours noire. Comment le faire aussi noir ou blanc selon la couleur de remplissage pour aider la visibilité?

Répondre

0

Réponse 1: Après quelques essais, il semble que il n'y a pas moyen de le faire sans créer une colonne personnalisée au préalable:

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

Réponse 2: utiliser une autre fonction tm_fill avec toutes les options précédentes et de faire Addtionally il transparent par alpha = 0.

Ainsi, le code révisé serait:

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) 

qui donnera le résultat souhaité: custom map