0
我創建用於使用GGPLOT2和ggmap歐洲二氧化碳排放量R.到其二氧化碳排放量等值線圖對每個國家的填充顏色對應GGPLOT2連續顏色漸變。顏色和連續圖例使用scale_fill_gradient實現。不過,我還希望單個國家的顏色不是來自連續的圖例(稍後用於Shiny應用程序中)。我還沒有弄清楚如何讓scale_fill_gradient只適用於多個geom_polygon圖層之一。適用於單個geom_polygon元件與R中
這裏是我的初始地圖:
這裏下載的地圖數據的代碼:
library(maptools)
library(ggplot2)
library(ggmap)
# read in a world map
WorldMap <- readShapePoly(fn="ne_50m_admin_0_countries/ne_50m_admin_0_countries")
# reduce shape file to a filtered data frame
WorldMapDf <- fortify(WorldMap,region='iso_a2')
# read in CO2 emissions
GEO <- c('FR','AT','BE','DE','DK','FI','GB','IE','NL','NO','SE')
CO2 <- c(59.5,86.9,137.4,425.8,303.9,353.2,380.3,427.0,476.4,1.8,47.6)
CO2_df <- data.frame(GEO,CO2)
# the range of values that the colour scale should cover
colorbar_range <- range(CO2_df$CO2)
mean_price <- mean(colorbar_range)
# merge map polygons with electricity CO2 emissions
CO2Map <- merge(WorldMapDf, CO2_df, by.x="id", by.y="GEO", all.x = T)
CO2Map <- CO2Map[order(CO2Map$order),]
#limit data to main Europe
europe.limits <- data.frame(matrix(c(35.50,-11.43,70,31.11),nrow=2,ncol=2,byrow = T))
names(europe.limits) <- c('lat','long')
CO2MapSubset <- subset(CO2Map, long > min(europe.limits$lon) & long < max(europe.limits$lon) & lat > min(europe.limits$lat) & lat < max(europe.limits$lat))
# create x and y limits
xrange <- c(min(CO2MapSubset$long),max(CO2MapSubset$long))
yrange <- c(min(CO2MapSubset$lat),max(CO2MapSubset$lat))
initial_map <- ggplot(data=CO2MapSubset) + # data layer
geom_polygon(aes(x=long, y=lat, group=group, fill=CO2)) +
coord_map(projection = "mercator",xlim=xrange,ylim=yrange) +
scale_fill_gradient2(low='gold',mid = "white",high='firebrick2',na.value = "lightgrey",midpoint=mean_price,limits=colorbar_range, name='CO2 (g/kWh)') +
geom_path(aes(x=long, y=lat, group=group), color='black',size=0.2)
# display map
initial_map
現在,我想喜歡讓一個國家變成不同於連續色階的顏色(例如藍色),如圖例所示。
以爲可以通過添加附加geom_polygon層到初始地圖做到這一點。爲了讓丹麥藍,我嘗試這樣做:
map_with_selected_country <- initial_map +
geom_polygon(data = CO2MapSubset[CO2MapSubset$id == 'DK',], aes(x=long, y=lat, group=group, fill='blue'))
,但我得到的錯誤信息:「錯誤:供給連續尺度離散值」,因爲填充「藍」與scale_fill_gradient2衝突。有沒有辦法讓scale_fill_gradient2只指向一個數據集?還是有另一種方法來解決這個問題?
一般,這是可取的,以提供[*最小*再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example#answer-5963610)。我認爲這裏有一些壓艙物可以放下。你當然必須從你的具體問題中抽象出來,然後......對於你的問題:試着在'aes'映射之外放置'fill ='blue''?即'geom_polygon(data = CO2MapSubset [CO2MapSubset $ id =='DK',],aes(x = long,y = lat,group = group),fill ='blue')'? 「藍色」是一個離散值,一個字符串,它提供了一個連續的填充比例(1,2,3 ...)。 – lukeA
謝謝。這很好。我想我可以刪除我的所有評論,使用的庫和地圖限制。我會下一次。 – fifthace