Seite 1 von 2

rworldmap

Verfasst: So Jan 28, 2018 2:29 pm
von Mily
Hallo

Ich möchte eine Europakarte erstellen, welche pro Land die Anzahl Dienstleistungen darstellt (in Form von unterschiedlichen Farben) und Auskunft über die Datenvollständigkeit gibt (in Form unterschiedlich starker Straffierung).

Die Europakarte mit den nach Anzahl Dienstleistungen eingefärbten Ländern habe ich folgendermassen erstellt.

Code: Alles auswählen

library(rworldmap)
Auswertung<-read.delim("Auswertung_1.csv",sep=";",dec=".",header=TRUE)
Auswertung
 Country Dienstleistungen Datenvollstandigkeit Datenherkunft
1         Austria                3                  100             2
2         Belgium                0                   50             1
3        Bulgaria               NA                    0             0
4         Croatia                0                  100             1
5          Cyprus               NA                    0             0
6  Czech Republic                0                   50             1
7         Denmark                5                  100             2
8         Estonia                0                  100             1
9         Finland                4                  100             2
10         France               NA                    0             1
11        Germany                3                  100             2
12         Greece                2                  100             2
13        Hungary                0                   75             1
14        Ireland                0                   75             1
.......
map.info = joinCountryData2Map(Auswertung, joinCode="NAME", nameJoinColumn="Country") # Daten mit der Karte verbinden
palette = colorRampPalette(c("brown4", "darkgoldenrod1", "darkolivegreen4"))(5) # Farbverlauf selbst definieren.
catMethod="categorical"
mapCountryData(map.info, nameColumnToPlot="Dienstleistungen", colourPalette = palette, catMethod=catMethod, 
xlim = c(-17, 33),
  ylim = c(35, 70),
  asp = 1
)

Nun würde ich gerne die Spalte "Datenvollstandigkeit" für die einzelnen "Dienstleistungen" abbilden in Form unterschiedlich starker Straffierung, d.h. Datenvollstandigkeit=100->Land ist voll mit der Farbe ausgefüllt, Datenvollständigkeit=75->Land ist in der Farbe mit dicken Linien straffiert, Datenvollstandigketi=50->Land ist in der Farbe mit etwas dünneren Linien straffiert,...

Wie könnte ich das machen? Ich habe bisher keine Funktion in rworldmap für eine Straffierung gefunden...
Könnte man evt. so was wie einen zweiten Layer darüber legen? Aber wie?

Vielen Dank für eure Hilfe!

Re: rworldmap

Verfasst: So Jan 28, 2018 2:58 pm
von EDi
Wie könnte ich das machen? Ich habe bisher keine Funktion in rworldmap für eine Straffierung gefunden...
Könnte man evt. so was wie einen zweiten Layer darüber legen? Aber wie?
Schraffierungen sind in R generell "schwer"...
Einpaar alternative Ideen die mir einfallen:
In einer anderen Karte, oder als "durchsichtigkeit" oder als text um centroid des Landes?

Re: rworldmap

Verfasst: So Jan 28, 2018 6:30 pm
von Mily
Hm, wie meinst du das mit der "Durchsichtigkeit"?

Re: rworldmap

Verfasst: So Jan 28, 2018 7:20 pm
von EDi
Auch Transparenz, je weniger Daten, desto durchsichtiger (=heller / weißer).

Re: rworldmap

Verfasst: Mo Jan 29, 2018 3:25 pm
von Mily
Hallo

Danke für die Erläuterung.
Ich habe es nun mit folgendem Ansatz versucht (momentan noch mit nur einer Abstufung):

Code: Alles auswählen

dF$completeness <-
ifelse(Auswertung$Datenvollstandigkeit < 100,col=alpha(palette,0.5)
,col=alpha(palette,1))
Leider funktioniert es noch nicht. Ich erhalte die Fehlermeldung:

Code: Alles auswählen

Fehler in ifelse(Auswertung$Datenvollstandigkeit < 100, col = alpha(palette,  : 
  unbenutzte Argumente (col = alpha(palette, 0.5), col = alpha(palette, 1))
Könnte das Problem daran liegen, dass man die "normalen" R codes nicht mit dem package (hier: rworldmap) kombinieren kann...

Habt ihr eine Idee?

Re: rworldmap

Verfasst: Di Jan 30, 2018 8:35 am
von jogo
Mily hat geschrieben: Mo Jan 29, 2018 3:25 pm Ich habe es nun mit folgendem Ansatz versucht (momentan noch mit nur einer Abstufung):

Code: Alles auswählen

dF$completeness <-
ifelse(Auswertung$Datenvollstandigkeit < 100,col=alpha(palette,0.5)
,col=alpha(palette,1))
möchtest Du sowas:

Code: Alles auswählen

dF$completeness <- ifelse(Auswertung$Datenvollstandigkeit < 100, alpha(palette,0.5), alpha(palette,1))
:?:

Gruß, Jörg

Re: rworldmap

Verfasst: Mi Jan 31, 2018 9:47 am
von Mily
Danke Jörg für die Code Korrektur.

Doch leider funktioniert es so auch nicht. R scheint die Funktion "alpha" nicht zu kennen:

Code: Alles auswählen

dF$completeness <- ifelse(Auswertung$Datenvollstandigkeit < 100, alpha(palette,0.5), alpha(palette,1))
Fehler in ifelse(Auswertung$Datenvollstandigkeit < 100, alpha(palette,  : 
  konnte Funktion "alpha" nicht finden
Die Funktion "alpha" scheint in rworldmap nicht enthalten zu sein.
Gibt es keine Möglichkeit zur kombinierten Anwendung vom package und "normalem" R?

Oder müsste man sonst selber die Funktion im package neu definieren? Ich habe in der library nachgeschaut und finde dort einzig das Skript "rworldmap.R". Dieses enthält aber nur eine Beschreibung der Codes in rworldmap und definiert keine Funktionen...

Re: rworldmap

Verfasst: Mi Jan 31, 2018 10:05 am
von jogo
Hallo Mily,

es gibt z.B.:
scales::alpha Modify colour transparency. Vectorised in both colour and alpha.
coin::alpha Genetic Components of Alcoholism
ggplot2::scale_alpha Alpha transparency scales
psych::alpha Find two estimates of reliability: Cronbach's alpha and Guttman's Lambda 6.

Was möchtest Du tun? Wolltest Du die Funktion alpha() aus dem Paket scales verwenden?
Wenn ja, musst Du vorher das Paket laden mit:

Code: Alles auswählen

library("scales")
Gruß, Jörg

Re: rworldmap

Verfasst: Mi Jan 31, 2018 10:41 pm
von Mily
Danke für den Tipp mit der library scales.

Der einzelne Code funktioniert jetzt, jedoch noch nicht die Ergänzung in der Karte.

Ich habe es so versucht:

Code: Alles auswählen

library(rworldmap)
library(scales)

Auswertung<-read.delim("Auswertung_2.csv",sep=";",dec=".",header=TRUE)

map.info = joinCountryData2Map(Auswertung, joinCode="NAME", nameJoinColumn="Country") # Daten mit der Karte verbinden

palette = colorRampPalette(c("brown4", "darkgoldenrod1", "darkolivegreen4"))(6) # Farbverlauf selbst definieren.
catMethod="categorical"
opacity = ifelse(Auswertung$Datenvollstandigkeit < 100, alpha(palette,0.5), alpha(palette,1))
palette_new=merge(palette,opacity)

mapCountryData(map.info, nameColumnToPlot="Dienstleistungen", colourPalette = palette_new, catMethod=catMethod,addLegend=FALSE,
xlim = c(-8, 33),
  ylim = c(40, 65),
  asp = 1
)
Die Fehlermeldung lautet:

Code: Alles auswählen

Fehler in col2rgb(colors, alpha = alpha) : 
  ungültiger Farbname in 'c(2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 
1, 2, 4, 6, 5, 3, 1, 2, 4, 6, 5, 3, 1)'
Zusätzlich: Warnmeldung:
In rwmGetColours(colourPalette, numColours) :
  2 colours specified and 6 required, using interpolation to calculate colours

Ich bin zudem etwas unsicher, ob dies mit der unterschiedlichen Transparenz wirklich eine geeignete Darstellungsform ist. Ich glaube, die Karte wird mit den verschiedenen Farben und den unterschiedlichen Transparenzen schlussendlich ziemlich unübersichtlich.
Die Variante "Straffierung" wäre mir nach wie vor viel lieber. Gibt es das wirklich nicht in R?

Re: rworldmap

Verfasst: Do Feb 01, 2018 3:12 am
von EDi
du könntest auch eine layer drunterlegen und den oberen etwas transparent machen...
Schaffierung ginge so https://stackoverflow.com/questions/381 ... aps-with-r