R 带有ggplot2和geom_地图的彩色编码世界地图
我试图绘制一张世界地图,其中每个国家的颜色取决于数据框中变量的值R 带有ggplot2和geom_地图的彩色编码世界地图,r,ggplot2,R,Ggplot2,我试图绘制一张世界地图,其中每个国家的颜色取决于数据框中变量的值 > affiliation # A tibble: 252 × 2 region value <chr> <dbl> 1 Aruba 0 2 Afghanistan 0 3 Angola 0 4 Ang
> affiliation
# A tibble: 252 × 2
region value
<chr> <dbl>
1 Aruba 0
2 Afghanistan 0
3 Angola 0
4 Anguilla 0
5 Albania 0
6 Finland 1
7 Andorra 0
8 United Arab Emirates 0
9 Argentina 2
10 Armenia 0
# ... with 242 more rows
我的问题是,大多数值是0、1或2,在20-30个国家中很少有值,但在330个国家中有1个异常值。这使得颜色比例毫无用处,因为该国家/地区显示为饱和颜色,而所有值低得多的国家/地区显示为白色
我试图将geom_图(aes(fill=value),…
替换为geom_图(aes(fill=log(value)),…
,但在这种情况下,图例中的比例显示为0到5+(而不是0到330)
我可以做些什么来更好地控制许多低值国家的颜色饱和度,以便使它们在世界地图上更可见?
谢谢与其使用
缩放填充梯度
,不如尝试调用缩放填充梯度
,根据需要设置颜色停止。例如:
scale_fill_gradientn(colours = c('#ff0000', '#cccccc', '#0000ff'), values = c(0, 30, 331))
与其使用
scale\u fill\u gradient
,不如尝试调用scale\u fill\u gradientn
,根据需要设置颜色停止。例如:
scale_fill_gradientn(colours = c('#ff0000', '#cccccc', '#0000ff'), values = c(0, 30, 331))
ggplot2中的大多数连续
scale
函数都接受一个trans
参数,该参数指定要在该美学上使用的变换。这将自动处理变换和标签
在您的示例中,添加
trans=“log1p”
(不仅仅是“log”
,因为您的数据有两个0
值)对于scale\u gradient\n
的参数可能会有所帮助。ggplot2中的大多数连续scale
函数都接受一个trans
参数,该参数指定要在该美学上使用的变换。这将自动处理变换和标签
在您的示例中,添加
trans=“log1p”
(不仅仅是“log”
,因为您的数据有两个0
值)对于scale\u gradient\n
的参数可能会有所帮助。谢谢。我不知道scale\u fill\u gradientn
。如果我可以在参数中提供值的范围,这将是个好主意,但我找不到任何信息。有可能吗?您可以通过提供额外的止损点来接近。例如,values=c(0,30,35,320,331),colors=c('red',red',red',red',green',green')
谢谢。我不知道比例填充梯度n
。如果我可以在值参数中提供范围,这是个好主意,但我找不到任何信息。有可能吗?你可以通过提供额外的止损点来接近。例如,值=c(0,30,35,320,331),colors=c('red',red',red',red',green',green')
向前迈进了一大步。谢谢。我如何修改图例,使其显示0到330范围,而不是1到5范围?您可以使用breaks
参数。因此,如果您想使用@jdobres'中的颜色,请回答:缩放填充梯度n(name=“附属公司数量”,trans='log1p',colors=c('ff0000','cccccc','0000ff'),value=c(0,30,331)/331,breaks=c(0,30,331))
明白了。只需将breaks
和labels
参数包含在scale\u fill\u gradient
中,就可以向前迈进一大步。谢谢。我如何修改图例,使其显示0到330的范围,而不是1到5的范围?您可以使用breaks
参数。因此,如果您想使用@jdobres'answ中的颜色er:scale\u fill\u gradientn(name=“Number of Affiliates”,trans='log1p',colors=c('ff0000','ccccccc','0000ff'),values=c(0,30331)/331,breaks=c(0,30331))
明白了。只需将breaks
和label
参数包含在scale\u fill\u gradient中即可