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

如何在R中使用ggplot有条件地填充区域,r,ggplot2,maps,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&

我试图用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`
看起来像

谁能告诉我如何从这个渐变方案到2色方案,并“美化”地图,如“预期”的图像


请注意,我对R和使用R的地图非常陌生,因此请原谅我犯的任何明显错误。

通过添加以下代码行并按照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")
>who.won总计$Clinton)
>总计$isTrumptotal$votePercenttotal$Clinton,是=总计$Trump,否=总计$Clinton);
>总计$colorhead(总计)
long lat group order州分区域克林顿胜过其他人
1-87.46201 30.38968 1 1阿拉巴马州34.4 62.1 3.6
2-87.48493 30.37249 1 2阿拉巴马州34.4 62.1 3.6
3-87.52503 30.37249 13阿拉巴马州34.4 62.1 3.6
4-87.53076 30.33239 14阿拉巴马34.4 62.1 3.6
5-87.57087 30.32665 1 5阿拉巴马34.4 62.1 3.6
6-87.58806 30.32665 16阿拉巴马34.4 62.1 3.6
峡部呕吐百分比颜色
162.1#3182BD
2 1 62.1#3182BD
3 1 62.1#3182BD
4 1 62.1#3182BD
5162.1#3182BD
6162.1#3182BD
>ggplot()+geom_多边形(数据=总计,aes(x=长,y=纬度,组=组,填充=字符(总计$color)),color=“黑色”,size=0.15)+实验室(fill=“投票”)
这给了我下面的地图-

谁能解释一下

  • 如何使颜色透明度与投票百分比成比例(总计$votePercent)
  • 如何将颜色图例的标签重命名为“Clinton”和“Trump”。(它从总计$color列中提取值,该列为十六进制代码颜色)

  • 通过添加以下代码行并按照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")
    
    >who.won总计$Clinton)
    >总计$isTrumptotal$votePercenttotal$Clinton,是=总计$Trump,否=总计$Clinton);
    >总计$colorhead(总计)
    long lat group order州分区域克林顿胜过其他人
    1-87.46201 30.38968 1 1阿拉巴马州34.4 62.1 3.6
    2-87.48493 30.37249 1 2阿拉巴马州34.4 62.1 3.6
    3-87.52503 30.37249 13阿拉巴马州34.4 62.1 3.6
    4-87.53076 30.33239 14阿拉巴马34.4 62.1 3.6
    5-87.57087 30.32665 1 5阿拉巴马34.4 62.1 3.6
    6-87.58806 30.32665 16阿拉巴马34.4 62.1 3.6
    峡部呕吐百分比颜色
    162.1#3182BD
    2 1 62.1#3182BD
    3 1 62.1#3182BD
    4 1 62.1#3182BD
    5162.1#3182BD
    6162.1#3182BD
    >ggplot()+geom_多边形(数据=总计,aes(x=长,y=纬度,组=组,填充=字符(总计$color)),color=“黑色”,size=0.15)+实验室(fill=“投票”)
    
    这给了我下面的地图-

    谁能解释一下

  • 如何使颜色透明度与投票百分比成比例(总计$votePercent)
  • 如何将颜色图例的标签重命名为“Clinton”和“Trump”。(它从总计$color列中提取值,该列为十六进制代码颜色)

  • 在开始绘图之前,通过减去克林顿和特朗普列,制作一个要映射的列以填充。现在,您的限制与正在绘制的实际数据不符。不过,在不使用预先构建的choropleth软件包的情况下获得AK/HI插图和东海岸撤军将是一项艰巨的工作。感谢您的回复。我从为|特朗普-克林顿|创建一个不同的专栏中了解到的情况不会产生预期的结果。我想使用两种颜色方案——“蓝色”代表克林顿,“红色”代表特朗普有条件地填充(取决于谁拥有更高的百分比)并按比例着色(对应于各自的选民百分比),而不是渐变法;这个标志表明谁赢了。如果您想要严格的双色且没有渐变,请使用该数据创建一列。布尔或因子可以。只是不要试图把数据放在绘图的中间。谢谢。你能用一些代码详细说明一下吗。我对这件事还不太熟悉,请原谅,但这一切有时听起来都与我格格不入。我的意思是,我们不是已经在各自的专栏中有克林顿和特朗普的数据了吗?它可以像
    df$t\u win df$Clinton
    一样简单。目前,信息已经存在,但不是您想要打印的格式。在开始打印之前,通过减去克林顿和特朗普列,制作一个要映射以填充的列。现在,您的限制与正在绘制的实际数据不符。不过,在不使用预先构建的choropleth软件包的情况下获得AK/HI插图和东海岸撤军将是一项艰巨的工作。感谢您的回复。我从为|特朗普-克林顿|创建一个不同的专栏中了解到的情况不会产生预期的结果。我想使用两种颜色方案——“蓝色”代表克林顿,“红色”代表特朗普有条件地填充(取决于谁拥有更高的百分比)并按比例着色(对应于各自的选民百分比),而不是渐变法;这个标志表明谁赢了。如果您想要严格的双色且没有渐变,请使用该数据创建一列。布尔或因子可以。只是不要试图把数据放在绘图的中间。谢谢。你能用一些代码详细说明一下吗。我对这件事还不太熟悉,请原谅,但这一切有时听起来都与我格格不入。我的意思是,我们不是已经在各自的专栏中有克林顿和特朗普的数据了吗?它可以像
    df$t\u win df$Clinton
    一样简单。目前,信息在那里,但不是以您想要打印的格式。