2016-11-08 75 views
0

假設我有一個簡單的數據框來繪圖,其中必須對與包含在列中的度量相關的點進行着色。所以,如果我有:ggplot:如何選擇與列有關的「正確」顏色

dataframe 
# X1   X2  pop 
# 1 -0.11092652 -1.955598e-09 448053 
# 2 -0.09999865 -2.310067e-10 418231 
# 3 -0.05944755 -3.475013e-09 448473 
# 4 0.51378848 1.631781e-09 119548 
# 5 0.09438223 -9.606475e-10 323288 
# 6 0.19349045 6.074025e-10 203153 
# 7 0.06685609 3.210156e-10 208339 
# 8 -0.10915456 -1.407190e-09 429178 
# 9 -0.10348100 -1.401948e-09 1218038 
# 10 -0.08607617 -7.356602e-10 383018 
# 11 1.00343465 -2.423237e-08 209550 
# 12 -0.05839148 1.503955e-09 287042 
# 13 -0.09960163 2.167945e-10 973129 
# 14 -0.05793417 2.510107e-09 187249 
# 15 0.02191610 2.479708e-09 915225 
# 16 0.48877872 1.338346e-08 462999 
# 17 -0.10289556 1.472368e-09 1108776 
# 18 -0.10316414 2.933469e-10 402422 
# 19 -0.09545279 -2.926035e-10 274035 
# 20 -0.06111044 3.464014e-09 230749 

,我以下列方式使用ggplot:

ggplot(dataframe) + 
    ggtitle("Somehow useful spatialization")+ # Electricity/Gas 
    geom_point(aes(dataframe$X1, dataframe$X2), color = dataframe$pop, size=2) + 
    theme_classic(base_size = 16) + 
    guides(colour = guide_legend(override.aes = list(size=4)))+ 
    xlab("X")+ylab("Y") 

我得到這樣的: enter image description here

這是一個可能的命題。 Neverthless,假設我想要着色的點代表pop列,即,具有來自(例如)淺橙色的顏色,傳遞暗紅色和黑色。如何「縮放」列pop以獲取此類圖形?

編輯:

> dput(dataframe) 
structure(list(X1 = c(-0.110926520419347, -0.0999986452719714, 
-0.0594475526112884, 0.513788479303472, 0.0943822277852107, 0.193490454204271, 
0.0668560854540437, -0.109154563987586, -0.103480996064617, -0.0860761723229372, 
1.00343465471568, -0.0583914756527933, -0.0996016272609995, -0.0579341671474729, 
0.0219161022704227, 0.488778719096658, -0.102895564162661, -0.103164140322136, 
-0.0954527927249849, -0.0611104428640883), X2 = c(-1.9555978205951e-09, 
-2.31006712207053e-10, -3.47501251356368e-09, 1.63178106438806e-09, 
-9.60647459243156e-10, 6.07402512804044e-10, 3.21015629676789e-10, 
-1.40718981687972e-09, -1.40194842954735e-09, -7.35660154466167e-10, 
-2.423237202138e-08, 1.50395541775022e-09, 2.16794489937917e-10, 
2.51010717100061e-09, 2.47970820013341e-09, 1.33834570208731e-08, 
1.47236816671351e-09, 2.93346922578509e-10, -2.92603459149485e-10, 
3.46401369936372e-09), pop = c(448053L, 418231L, 448473L, 119548L, 
323288L, 203153L, 208339L, 429178L, 1218038L, 383018L, 209550L, 
287042L, 973129L, 187249L, 915225L, 462999L, 1108776L, 402422L, 
274035L, 230749L)), .Names = c("X1", "X2", "pop"), row.names = c(NA, 
20L), class = "data.frame") 
+1

如果你可以添加'dput()'你的數據幀的,我們可以自己使用這些數據。 (運行'dput(dataframe)'並把輸出放在你的問題中)乍一看它可能與你添加顏色的地方有關。如果使用:geom_point(aes(x = X1,y = X2,color = pop),size = 2)+而不是geom_point行,會發生什麼? –

回答

2

隨着ggplot你可以在你inital ggplot調用添加您的美學(AES)。既然你已經告訴ggplot數據在哪裏(在dataframe),你可以直接通過它們的名字來引用變量(沒有dataframe$)。現在要將顏色作爲一種比例尺,它需要在aes()調用中作爲審美調用,而不是靜態值。一旦它被添加爲美學,我們可以通過添加scale來定製它的反應。考慮到這一點,我們給出了以下代碼:

ggplot(dataframe, aes(x = X1, y = X2, color = pop)) + 
    ggtitle("Somehow useful spatialization")+ # Electricity/Gas 
    geom_point(size=2) + 
    theme_classic(base_size = 16) + 
    guides(colour = guide_legend(override.aes = list(size=4))) + 
    xlab("X")+ylab("Y") + 
    scale_color_gradient2(low = "green", mid = "red", high = "black", midpoint = mean(dataframe$pop)) 

此代碼給出下圖。顏色可以通過玩scale_color_gradient2部分進一步調整。 (爲什麼綠色作爲low給人比實際選擇橙色作爲low顏色是超越我一個更好的橘子,我剛剛結束了有巧合)

The resulting graph

+0

謝謝Marijn!我還可以問你如何修改圖例「流行」? –

+0

如果您想要在圖例中修復某個特定問題,則應該提出另一個問題。如果只是一般的調整你可以看看ggplot2的文檔:http://docs.ggplot2.org/current/或者專門爲圖例:http://docs.ggplot2.org/current/guides.html或http ://docs.ggplot2.org/current/guide_legend.html –

+0

我已經解決了(在這種情況下)「theNameIwant < - pop」,並且像我以前那樣做。 –