2016-08-29 86 views
0

我正在創建一個美國的cloropleth地圖,其中每個縣都由2012年奧巴馬選票的比例着色。我想改變人口覆蓋率的不透明度(類似於here)。我已經嘗試在我的geom_map aes中添加alpha = populationVariable,但沒有運氣。ggplot改變地圖填充不透明度由第二個變量

這是我目前的代碼。任何人都可以將我指向正確的方向嗎?

gg <- ggplot() 
gg <- gg + geom_map(data=mapC, map=mapC, aes(x=long, y=lat, map_id=id, group=group, fill=mapC$proportionObama)) 
gg = gg+ scale_fill_gradient2(limits= c(0,100), name="Proportion of Votes for Obama", low="#E5000A", high="#0012BF",mid="#720964", midpoint=50) 
gg = gg + theme_map() +coord_equal() 
gg <- gg + geom_path(data = mapS, aes(long,lat, group=group), colour="gray50", size=.25) 
gg = gg + theme(legend.position="right") 
gg 
+2

請勿在'aes()'中使用'$'。你大多這樣做,但你的填充映射應該是'fill = proportionObama'。它會在一些簡單的情況下工作,但會在更復雜的情節中造成錯誤。 – Gregor

+1

請提供一個可重複的例子... –

+0

(1)SO提供了一種嵌入圖像的方法。 (2)請使用coord_map('polyconic')'顯示conUS圖像,或至少使用'coord_map()'和'coord_equal()'。 (3)阿拉斯加,夏威夷和波多黎各也都投了贊成票,你們將他們排除在外。 (4)爲什麼不使用條形圖? – hrbrmstr

回答

1

我認爲alpha需要是被映射爲所述ggplot文檔0和1之間總是顯示的分數值的變量。

你沒有重現的代碼,所以這裏是一個快速的測試,似乎工作。

library(data.table) 
library(ggplot2) 


tmp = data.table(
    'x'=c(1,2,3), 
    'y'=c(1,2,3), 
    'z'=c(.1,.5,.8) 
) 

p = ggplot() 
p = p + geom_point(data=tmp , aes(x=x,y=y,alpha=z)) 
print(p) 
+1

ggplot將映射任何原子列的重新縮放到alpha的範圍。我不確定這與這個問題有什麼關係。 – hrbrmstr

+0

我相信我的問題是,我使用的是一個非常小的alpha(每個縣的美國人口比例),因此它只是將所有內容映射爲(幾乎)完全透明的。 – Martin

+0

@Martin:hrbrmstr是正確的 - 如果** all **你的alpha值一直很小,那麼它就不重要了。你的問題是值的*範圍非常大,但幾乎所有的值都在分佈的低端。隨着洛杉磯郡擁有1000萬人口,任何一個人口不足1M的縣(3007個縣中約2990個)將幾乎看不見。一個更好的方法可能是使用對數格,例如0-10k,10k-100k,100k-1M,1M-10M。 – Gregor