gpt4 book ai didi

r - ggplot 中按比例大小的箭头

转载 作者:行者123 更新时间:2023-12-04 09:20:16 25 4
gpt4 key购买 nike

基于 ggplot2 seals example ,我正在尝试更改箭头的粗细,以便它们的整体大小更好地反射(reflect)数据变量。我可以指定长度和厚度,但不知道如何更改箭头的大小。非常感谢任何建议。

require(ggplot2)
require(grid)

d = seals[sample(1:nrow(seals), 100),]
d$size = sqrt(sqrt(d$delta_long^2 + d$delta_lat^2))

ggplot(d, aes(x = long, y = lat, size = size)) +
geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat), arrow = arrow(length = unit(0.1,"cm")))

enter image description here

编辑

解决方案代码:
ggplot(d, aes(x = long, y = lat, size = size)) +
geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat),
arrow = arrow(length = unit(d$size/3, "cm"), type='closed')) +
scale_size(range = c(0, 2))

最佳答案

我不能说这是您问题的完整解决方案,但至少它可以是一个开始。

ggplot(d, aes(x = long, y = lat, size = size)) +
geom_segment(aes(xend = long + delta_long, yend = lat + delta_lat),
arrow = arrow(length = unit(0.7, "cm"))) +
scale_size(range = c(1, 2))

我的变化很小:更大的箭头和大小比例。如果您的目标是避免过度绘图,则大小比例的上限是最重要的。

enter image description here

从现在开始,最好只留下箭头,因为当尺寸较小时,线条是不可见的。这是一个肮脏的黑客:
 ggplot(d, aes(x = long, y = lat, size = size)) +
geom_segment(aes(xend = long + delta_long/100, yend = lat + delta_lat/100),
arrow = arrow(length = unit(0.7,"cm"))) +
scale_size(range = c(1, 2))

enter image description here

当然,重要的是要在大小值之间保持适当的视觉关系!否则,您的情节可能会产生误导。但这取决于数据,所以我不能给你进一步的建议。对不起,如果这是一个明显的点。

更新:事实证明,unit() 函数是矢量化的,所以它来拯救了!
ggplot(d, aes(x = long, y = lat, size = size)) +
geom_segment(aes(xend = long + delta_long/100, yend = lat + delta_lat/100),
arrow = arrow(length = unit(d$size * 5,"cm"))) +
scale_size(range = c(1, 2))

enter image description here

关于r - ggplot 中按比例大小的箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656126/

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