我有一个形状文件,my_sf. 如果我写:
ggplot() +
geom_sf(
data = my_sf,
size = 0.5 # this is the default value actually
)
Run Code Online (Sandbox Code Playgroud)
然后就可以正常工作了。但是,如果我my_line_width向 中添加一个属性my_sf,并将该列中的每个值设置为 0.5,然后写入:
ggplot() +
geom_sf(
data = my_sf,
aes(size = my_line_width)
)
Run Code Online (Sandbox Code Playgroud)
然后我得到一堆巨大的线条,它们可怕地重叠。如果正常线条的宽度为 0.5,那么这些线条的宽度可能为 4。我不明白为什么它们不会产生相同的结果(除了图例,我知道只有在您使用美学时才会弹出图例)。有谁知道发生了什么事吗?
我也尝试过使用lwd而不是size. 完全相同的事情发生了:当我只是设置一个静态值时没问题,但是当我尝试通过美学提供值时,就会出错。
aes我很确定这与将数据映射到绘图背后的想法有关。例如,请参阅ggplot2 中 aes() 中传递选项与外部传递选项之间的差异或美学何时进入 aes() 内部或外部?。使用size或任何内部方式aes将数据映射到美学,以任何方式ggplot都会理解它(更多内容见下文)或外部aes使用恒定值来实际ggplot使用该值。您发现的行为通常适用于 ggplot,而不是特定于geom_sf.
您可以看到,即使使用geom_point
mtcars %>% ggplot(aes(mpg, wt, size=cyl))+geom_point()
k<-4
mtcars %>% ggplot(aes(mpg, wt, size=k))+geom_point()
k<-6
mtcars %>% ggplot(aes(mpg, wt, size=k))+geom_point()
k<-10
mtcars %>% ggplot(aes(mpg, wt, size=k))+geom_point()
Run Code Online (Sandbox Code Playgroud)
另外,大小的默认处理与 ggplot2 相当令人困惑,IMO:点面积是否不会随着scale_size_continuous的大小而线性增加?。当 aes 内仅提供 1 个值时,线条粗细可能始终为基线默认大小。正如您的评论者指出的那样,您可以使用 调整此行为scale,并且可以在某种程度上使用“身份”,但提供range /sf/answers/809964851/可能会有所帮助。
小智 6
在ggplot 3.4版本中linewidth引入了!!
https://www.tidyverse.org/blog/2022/11/ggplot2-3-4-0/#hello-linewidth