我正在尝试使用R地图库为特定国家/地区绘制特定颜色,并使用scale_fill_manual()
我的数据框是«数据»,有3列:第一列是国家名称,第二列是一些数字数据,第三列是颜色:
countries toplot color
1 Argentina -1 red
2 Armenia -1 red
3 Australia -1 red
4 Bahrain -1 red
5 Botswana -1 red
6 Belgium -1 red
7 Bulgaria -1 red
8 Canada -1 red
9 Chile -1 red
10 Taiwan -1 red
11 Croatia -1 red
12 Czech Republic -1 red
13 UK:Great Britain -1 red
14 Egypt -1 red
15 Denmark -1 red
16 Finland 0 yellow
17 France 0 yellow
18 Georgia 0 yellow
19 Germany 0 yellow
20 China:Hong Kong 0 yellow
21 Hungary 0 yellow
22 Indonesia 0 yellow
23 Iran 0 yellow
24 Ireland 0 yellow
25 Israel 0 yellow
26 Italy 0 yellow
27 Japan 0 yellow
28 Jordan 0 yellow
29 Kazakhstan 1 darkgreen
30 Korea 1 darkgreen
31 Kuwait 1 darkgreen
32 Lebanon 1 darkgreen
33 Lithuania 1 darkgreen
34 Malaysia 1 darkgreen
35 Malta 1 darkgreen
36 Morocco 1 darkgreen
37 Netherlands 1 darkgreen
38 New Zealand 1 darkgreen
39 UK:Northern Ireland 1 darkgreen
40 Norway 1 darkgreen
41 Oman 1 darkgreen
42 Palestine 1 darkgreen
43 Poland 1 darkgreen
44 Portugal 1 darkgreen
45 Qatar 1 darkgreen
46 Russia 1 darkgreen
47 Saudi Arabia 0 yellow
48 Serbia 0 yellow
49 Singapore 0 yellow
50 Slovak Republic 0 yellow
51 Slovenia -1 red
52 South Africa -1 red
53 Spain -1 red
54 Sweden -1 red
55 Thailand 1 darkgreen
56 Turkey 1 darkgreen
57 United Arab Emirates 0 yellow
58 USA 1 darkgreen
这是我正在使用的代码:
library(maps)
library(ggplot2)
map = map_data("world")
map = subset(map, region!="Antarctica")
Countries = ggplot() +
geom_polygon(data = map, aes(x=long, y = lat, group = group), fill = "gray97", colour="darkgray", size=0.5)+
geom_map(data=data,map=map,aes(map_id=country, x=lon, y=lat), fill = "cornflowerblue", colour = "gray") +
coord_equal()
CountriesDif<-Countries +
geom_map(data = data, map = map, aes(map_id = country), fill = data$color, colour="darkgray") +
theme(legend.title = element_blank()) + # omit plot title saying 'color'
scale_fill_manual(values = c('darkgreen', 'yellow', 'red'),
labels = c('Above Mean', 'At Mean', 'Below Mean'))
CountriesDif + theme(legend.position = "bottom")
答案 0 :(得分:2)
对不起伙计们,我使用了错误的功能。添加scale_fill_identity("Title legend", labels = c("Below mean", "At mean", "Above mean"), breaks = plotclr, guide = "legend")
确实解决了我的问题。我想要保持正确的颜色顺序,需要使用scale_fill_identity
而不是scale_fill_manual
。
这是完整的代码(供同一问题中运行的其他人参考):
library(maps)
library(ggplot2)
map = map_data("world")
map = subset(map, region!="Antarctica")
Countries = ggplot() +
geom_polygon(data = map, aes(x=long, y = lat, group = group), fill = "gray97", colour="darkgray", size=0.5)+
coord_equal()
plotclr <- c("red","yellow", "darkgreen") #Choose the collors you want to plot
CountriesDif<-Countries +
geom_map(data = data, map = map, aes(map_id = country, fill = color), colour="darkgray") +
theme(legend.title = element_blank()) + # omit plot title saying 'color'
scale_fill_identity("Title legend", labels = c("Below mean", "At mean", "Above mean"), breaks = plotclr, guide = "legend")
TimssDif + theme(legend.position = "bottom")
感谢您的时间。