如何使用R中的ggplot有条件地填充区域

时间:2017-02-13 03:05:57

标签: r ggplot2 maps

我正在尝试使用R绘制2016年选举结果的美国地图 数据集如下所示 -

` >head(data)
       long      lat group order   State subregion Clinton Trump other
1 -87.46201 30.38968     1     1 alabama      <NA>    34.4  62.1   3.6
2 -87.48493 30.37249     1     2 alabama      <NA>    34.4  62.1   3.6
3 -87.52503 30.37249     1     3 alabama      <NA>    34.4  62.1   3.6
4 -87.53076 30.33239     1     4 alabama      <NA>    34.4  62.1   3.6
5 -87.57087 30.32665     1     5 alabama      <NA>    34.4  62.1   3.6
6 -87.58806 30.32665     1     6 alabama      <NA>    34.4  62.1   3.6`

任务是在2016年美国总统选举的每个州制作州与州之间的百分比投票份额地图,以便如果特朗普的选民百分比(数据$特朗普)>克林顿(数据$克林顿)它用红色其他蓝色着色。

此外,颜色强度与绘制的数据值成比例。

最终地图应如下所示

what i am supposed to make

所以这就是我能够实现的目标 -

ggplot() +
    geom_polygon(data = total, 
                 aes(x = long, y = lat, group = group, 
                     fill = ifelse(total$Trump > total$Clinton, 
                                   yes = total$Trump, 
                                   no = total$Clinton)), 
                 color = "black", size = 0.15) +
    scale_fill_gradient2(low = muted("red"), mid = "white", 
                         midpoint = 50, high = muted("blue"), 
                         limits = c(min(total$Trump), max(total$Clinton)))+
    labs(fill = "TestLabel")

看起来像

what i have made in 5 days

任何人都可以解释我如何从这种渐变方案转变为2种配色方案,以及&#34;美化&#34;地图中的预期&#34;预期&#34;图像?

请注意,我是R和使用R的地图的新手,所以请原谅我正在犯的任何明显错误。

1 个答案:

答案 0 :(得分:0)

通过添加以下代码行并按照alistaire的建议修改数据框,我能够更接近目标。

>who.won<-as.numeric(total$Trump>total$Clinton)

>total$isTrump<-who.won

>total$votePercent<-ifelse(total$Trump>total$Clinton,yes = total$Trump, no = total$Clinton);

>total$color<-factor(total$isTrump, levels =c(0,1), labels = c("#F79CD4","#0FCFC0"));

>head(total)

  long      lat group order   State subregion Clinton Trump other
1 -87.46201 30.38968     1     1 alabama      <NA>    34.4  62.1   3.6
2 -87.48493 30.37249     1     2 alabama      <NA>    34.4  62.1   3.6
3 -87.52503 30.37249     1     3 alabama      <NA>    34.4  62.1   3.6
4 -87.53076 30.33239     1     4 alabama      <NA>    34.4  62.1   3.6
5 -87.57087 30.32665     1     5 alabama      <NA>    34.4  62.1   3.6
6 -87.58806 30.32665     1     6 alabama      <NA>    34.4  62.1   3.6

isTrump votePercent   color
1       1        62.1 #3182BD
2       1        62.1 #3182BD
3       1        62.1 #3182BD
4       1        62.1 #3182BD
5       1        62.1 #3182BD
6       1        62.1 #3182BD

>ggplot()+geom_polygon(data = total, aes(x = long, y = lat, group = group,fill = as.character(total$color)), color = "black", size = 0.15 )+labs(fill = "Votes")

它给了我以下地图 - 1

任何人都可以解释 -

  1. 如何使颜色透明度与投票百分比成比例(总$ votePercent)。
  2. 如何将颜色图例的标签重命名为“Clinton”和“Trump”。 (它从总的$ color列中获取值,这是HEX代码颜色)。