我正在尝试绘制一张世界地图,其中每个国家/地区的颜色取决于数据框中变量的值。
> 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
我的代码工作正常:
library(ggplot2)
library(ggthemes)
ggplot(affiliation, aes(map_id = region)) +
geom_map(aes(fill = value), map = worldMap, color='grey', size=0.3) +
expand_limits(x = worldMap$long, y = worldMap$lat) +
theme_few()+
theme(legend.position = "bottom",
axis.ticks = element_blank(),
axis.title = element_blank(),
axis.text = element_blank()) +
scale_fill_gradient(low="white", high="darkblue", name="Number of Affiliates") +
guides(fill = guide_colorbar(barwidth = 10, barheight = .5))
我的问题是,大多数值都是0,1或2,20-30但是1个离群值国家中的值非常少,而330中的值。这使得颜色范围无用,因为该国家显示为饱和状态颜色较低的所有国家都显示为白色。
我尝试将geom_map(aes(fill = value),…
替换为geom_map(aes(fill = log(value)),…
,但在这种情况下,图例中的比例显示0到5+(而不是0到330)。
如何更好地控制价值较低的许多国家/地区的色彩饱和度,以便在世界地图上更加清晰可见? 谢谢
答案 0 :(得分:2)
而不是scale_fill_gradient
,为什么不尝试拨打scale_fill_gradientn
,根据需要设置颜色停止。例如:
scale_fill_gradientn(colours = c('#ff0000', '#cccccc', '#0000ff'), values = c(0, 30, 331))
答案 1 :(得分:2)
ggplot2中的大多数连续scale
函数接受trans
参数,该参数指定要在该美学上使用的转换。这将自动处理转换和标记。
在您的示例中,向trans = "log1p"
的参数添加"log"
(不只是0
,因为您的数据有几个scale_gradient_n
值)可能有所帮助。