2016-12-07 19 views
0

我創建用於使用GGPLOT2和ggmap歐洲二氧化碳排放量R.到其二氧化碳排放量等值線圖對每個國家的填充顏色對應GGPLOT2連續顏色漸變。顏色和連續圖例使用scale_fill_gradient實現。不過,我還希望單個國家的顏色不是來自連續的圖例(稍後用於Shiny應用程序中)。我還沒有弄清楚如何讓scale_fill_gradient只適用於多個geom_polygon圖層之一。適用於單個geom_polygon元件與R中

這裏是我的初始地圖:

Initial map

要重現此地圖,從http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip

這裏下載的地圖數據的代碼:

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只指向一個數據集?還是有另一種方法來解決這個問題?

+1

一般,這是可取的,以提供[*最小*再現的示例](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

+0

謝謝。這很好。我想我可以刪除我的所有評論,使用的庫和地圖限制。我會下一次。 – fifthace

回答

1

下面是一個例子:

library(ggplot2) 
map <- map_data("world") 
map$value <- setNames(sample(1:50, 252, T), unique(map$region))[map$region] 
p <- ggplot(map, aes(long, lat, group=group, fill=value)) + 
    geom_polygon() + 
    coord_quickmap(xlim = c(-50,50), ylim=c(25,75)) 
p + geom_polygon(data = subset(map, region=="Germany"), fill = "red") 

德國用紅色填充顏色overplotted:

enter image description here

您可以調整這個例子來滿足您的需要。

相關問題