2015-12-08 10 views
6

Als erstes ist hier Teil mydata ist (121315 * 4):R: justieren Skala Farbgradienten in ggplot2

 LONGITUDE LATITUDE NUM_PICKUPS TOTAL_REVENUE 
1 121.6177 38.9124   21   337.0 
2 121.8069 39.0210   16   454.7 
3 121.5723 38.9645   38   696.9 
4 121.6423 38.9258   622  13609.7 
5 121.5647 38.9129   116  2016.7 
6 121.6429 38.8846   120  2417.3 
7 121.5852 38.9279   117  1975.0 
8 121.6616 38.9189   94  1712.4 
9 121.5812 38.9828   50   981.6 
10 121.6411 38.9255   225  4696.2 

, dass das Sehen, die erste und die zweite Spalte ist die Länge und Breite.

mydata[1,3]=21 bedeutet, dass im Bereich (121.6177, 38.9124) gibt es 21 Pickups.

Dann habe ich Zuflucht mydata mit NUM_PICKUPS ab:

LONGITUDE LATITUDE NUM_PICKUPS TOTAL_REVENUE 
121.6019 39.0181  14243 514716 
121.5382 38.9609  13244 443754.7 
121.5381 38.9609   9645 325056 
121.5382 38.9608   8846 294345.6 
121.602  39.0181   6556 232254.5 
121.5383 38.9609   6152 208967.6 
121.5383 38.9608   6014 207677.8 
121.5381 38.9608   5544 185398.3 
121.6018 39.018   4546 167662.1 
121.5382 38.9607   4260 143088.9 
121.5827 38.8948   4133 72202.8 
121.6303 38.9183   3837 67683.6 
121.5966 38.9665   3747 56378.7 

Und es gibt die Zusammenfassung der mydata:

summary(mydata) 


LONGITUDE  LATITUDE  NUM_PICKUPS  TOTAL_REVENUE  
    Min. :121.1 Min. :38.76 Min. : 10.00 Min. : 92.9 
    1st Qu.:121.6 1st Qu.:38.91 1st Qu.: 15.00 1st Qu.: 289.7 
    Median :121.6 Median :38.92 Median : 27.00 Median : 515.1 
    Mean :121.6 Mean :38.93 Mean : 57.03 Mean : 1067.6 
    3rd Qu.:121.6 3rd Qu.:38.96 3rd Qu.: 59.00 3rd Qu.: 1089.5 
    Max. :122.0 Max. :39.32 Max. :14243.00 Max. :514716.0 

Jetzt will ich die Karte ziehen, die durch NUM_PICKUPS gefärbt ist, schauen bei meinen Codes.

g1 <- ggplot() + geom_point(data = mydata,aes(x = LONGITUDE,y = LATITUDE,color=NUM_PICKUPS)) 

enter image description here

Ja, sowohl die Codes und Grafik sind richtig, aber schaut die Farbe, es ist schwer zu identifizieren, wo der Ort mit hohen num_pickups ist? Und wo ist weniger?

Ich versuche, meine Codes mit scale_colour_gradient() zu ändern:

g1 + scale_colour_gradient(low = "red",high = "white") 

enter image description here

Aber das Bild aussehen, die Farbe ist auch schwer zu klassifizieren.

Dritter Versuch: Dieses Mal habe ich Parameter von alpha=I(1/100) und breaks() hinzufügen:

g1 <- ggplot() + geom_point(data = mydata,aes(x = LONGITUDE,y = LATITUDE,color=NUM_PICKUPS),alpha=I(1/100)) 
g1 + scale_colour_gradient(low = "red",high = "white", breaks=c(0,2000,4000)) 

enter image description here

Aber es ist immer noch hilflos!

Vierter Versuch:

ggplot(data = mydata, aes(x = LONGITUDE,y = LATITUDE, color = NUM_PICKUPS)) + geom_point() + scale_colour_gradient(limits = c(0, 60)) 

enter image description here

Fünfte Versuchen: Nach Angaben der Post vor 3 Jahren, ggplot2 Color Scale Over Affected by Outliers, versuche ich wieder meine Codes zu ändern:

mydata$NUM_PICKUPS1 <- "> 2000" 
mydata$NUM_PICKUPS1[mydata$NUM_PICKUPS <= 2000] <- NA 

g2 <- ggplot() + geom_point(data = subset(mydata,NUM_PICKUPS <= 2000), 
     aes(x = LONGITUDE,y = LATITUDE,color=NUM_PICKUPS),size=2) + geom_point(data = subset(mydata,NUM_PICKUPS > 2000),aes(x = LONGITUDE,y = LATITUDE,fill=NUM_PICKUPS1)) 

enter image description here

Etwas hat sich in den Ausreißern geändert, aber die Farbskala ist immer noch schwer zu klassifizieren!

Also, meine Frage ist, wie Sie meine Codes ändern, um die Farbe NUM_PICKUPS leicht zu identifizieren?

+3

Haben Sie einen Ausreißer in 'NUM_PICKUPS'? Können Sie das Ergebnis von 'summary (mydata $ NUM_PICKUPS)' posten? Es sieht so aus, als könnte es einen sehr großen Wert geben, was bedeutet, dass die Skala erweitert werden muss, um sie aufzunehmen. – Phil

+2

Sie können die Auflösung eines bestimmten Bereichs Ihrer Farbskala erhöhen, indem Sie 'scale_colour_gradientn' und das' rescale'-Argument wie beschrieben [hier] verwenden (http://stackoverflow.com/questions/20581746/small-value-variation-invisible- using-scale-color-gradient2/20584038 # 20584038) (Beschreibung für 'scale_fill_gradientn' [hier] (http://stackoverflow.com/questions/21758175/is-it-possible-to-define-the-mid-range -in-scale-fill-gradient2/21758729 # 21758729)). – Henrik

+0

Mit scale_colour_gradient (low = "rot", high = "weiß", break = c (2000,4000,6000)) können Sie die Skalierung auf die Verteilung Ihrer Daten einstellen. '_ (Passen Sie die Pausen nach Ihren an Daten)_. – GPierre

Antwort

6

Laut meinem Kommentar und Ihrer Antwort, denke ich, das Problem ist, dass Sie einige Ausreißer haben, die die Skala zwingen, zu erweitern, um sie unterzubringen.

Von Ihrer summary(), 75% Ihrer Fälle von NUM_PICKUPS sind zwischen 10 und 59. Die restlichen 25% steigt dann auf 14243, drei Größenordnungen größer!

Zusammenfassend ist der Bereich Ihrer Werte von NUM_PICKUPS zu groß, um Variationen unter 1000 zu zeigen.

Die von Ihnen gewählte Lösung hängt von Ihren Daten und davon ab, was Sie damit machen möchten. Eine Option besteht darin, einfach nur die Werte bis zu 75% anzuzeigen und die höchsten 25% als Ausreißer auszuschließen. Sie können dies tun, ohne die Daten zu ändern, indem Sie manuell die Grenzen mit der Einstellung, denke ich:

g1 + scale_colour_gradient(limits = c(0, 60)) 

Eine weitere Möglichkeit, Ihre Daten zu verwandeln wäre (vielleicht mit log() oder log10()). Zum Beispiel könnte mydata$LOG_PICKUPS <- log10(mydata$NUM_PICKUPS) helfen, den Bereich ausreichend zu reduzieren, um zu plotten.

+0

Jahr, Ihre Analyse von 'NUM_PICKUPS' von mydata ist ziemlich korrekt. Mit Ihrem Code: 'g1 + scale_colour_manual (limits = c (0, 60))', gibt es einen Fehler 'Kontinuierlicher Wert für diskrete Skalierung', also ändere ich ihn in 'g1 + scale_colour_gradient (limits = c (0, 60))) ' –

+0

Ich habe beide Ratschläge ausprobiert, aber es ist immer noch hilflos, nur wenige Dinge haben sich in der Karte geändert –

+0

Sie haben recht mit' scale_colour_gradient() '; Ich habe es korrigiert. Wie ist es "hilflos"? Kannst du beschreiben, was mit der Karte noch nicht stimmt? – Phil