rworldmap

Wie erstelle ich Grafiken, was ist zu beachten?

Moderatoren: EDi, jogo

Mily

rworldmap

Beitrag 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!
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: rworldmap

Beitrag 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?
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Mily

Re: rworldmap

Beitrag von Mily »

Hm, wie meinst du das mit der "Durchsichtigkeit"?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: rworldmap

Beitrag von EDi »

Auch Transparenz, je weniger Daten, desto durchsichtiger (=heller / weißer).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Mily

Re: rworldmap

Beitrag 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?
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: rworldmap

Beitrag 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
Mily

Re: rworldmap

Beitrag 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...
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: rworldmap

Beitrag 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
Mily

Re: rworldmap

Beitrag 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?
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: rworldmap

Beitrag 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
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten