gpt4 book ai didi

r - ggplot2:当 'size' 包含内部和外部 aes 语句时,为什么符号大小不同?

转载 作者:行者123 更新时间:2023-12-02 03:01:30 29 4
gpt4 key购买 nike

我已经使用 base-R 创建了很多 map ,但我现在正尝试使用 ggplot2 执行类似的任务,因为可以在单个页面上轻松排列多个图。基本上,我正在绘制收集特定感兴趣物种样本的位置,并希望符号大小反射(reflect)在该位置收集的物种的总重量。创建 basemap 和各种图层不是问题,但我无法按照我想要的方式获取符号大小和相关联的图例。

下面的可行示例演示了该问题。当我在 aes 之外包含“大小”时,符号大小似乎被适本地缩放(plot1)。但是当我在 aes 语句中放入“大小”时(为了获得图例),符号大小不再正确(plot2)。看起来 ggplot2 已经重新调整了数据。这应该是一项简单的任务,所以我显然缺少一些非常基本的东西。任何帮助理解这一点将不胜感激。

library(ggplot2)

#create a very simple dataset that includes locations and total weight of samples collected from each site
catch.data<-data.frame(long=c(-50,-52.5,-52,-54,-53.8,-52),
lat=c(48,54,54,55,52,50),
wt=c(2,38,3,4,25,122))

#including 'size' outside of aes results in no legend
#but the symbol sizes are represented correctly
plot1<-ggplot(catch.data,aes(x=long,y=lat)) +
geom_point(size=catch.data$wt,colour="white",fill="blue",shape=21)

#including 'size' within aes appears necessary in order to create a legend
#but the symbol sizes are not represented correctly
plot2<-ggplot(catch.data,aes(x=long,y=lat)) +
geom_point(aes(size=catch.data$wt),colour="white",fill="blue",shape=21)

enter image description here

最佳答案

首先,您不应该在 aes 中引用数据框名称,它会将图例弄乱。所以正确的版本将是

plot3 <- ggplot(catch.data,aes(x=long,y=lat)) + 
geom_point(aes(size=wt),colour="white",fill="blue",shape=21)

现在为了展示多样性,您应该使用 rangescale_size_continuous 参数,例如
plot3 + scale_size_continuous(range = range(catch.data$wt) / 5)

enter image description here

多换几次,看看哪一个适合你。请注意,存在将数字表示为区域的常见可视化陷阱(谷歌例如“为什么饼图不好”)。

编辑:回答下面的评论,您可以通过例如引入固定比例 scale_size_continuous(limits = c(1, 200), range = c(1, 20))

关于r - ggplot2:当 'size' 包含内部和外部 aes 语句时,为什么符号大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45802571/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com