gpt4 book ai didi

r - 如何使ggplot2中的可变条宽不重叠或间隙

转载 作者:行者123 更新时间:2023-12-04 00:50:18 25 4
gpt4 key购买 nike

根据 documentation 的说法,geom_bar 在具有固定宽度的条形时效果最佳 - 即使条形之间的空间似乎由宽度决定.但是,当您具有可变宽度时,它不会像我预期的那样响应,导致不同条形之间出现重叠或间隙(如图所示 here )。

要了解我的意思,请尝试这个非常简单的可重现示例:

x <- c("a","b","c")
w <- c(1.2, 1.3, 4) # variable widths
y <- c(9, 10, 6) # variable heights

ggplot() +
geom_bar(aes(x = x, y = y, width = w, fill=x),
stat="identity", position= "stack")

我真正想要的是不同的条形只是相互接触,而不是重叠,就像在直方图中一样。

我试过添加 position= "stack" , "dodge" , 和 "fill ,但没有工作。解决方案是否在于 geom_histogram或者我只是不使用 geom_bar正确吗?

geom-plot overlap

附言要查看间隙问题,请尝试替换 40.5在上面的代码中并查看结果。

最佳答案

似乎没有任何直接的解决方案,因此我们应该将 x 轴视为连续的 w并手动计算刻度和柱中心所需的位置(this 很有用):

# pos is an explicit formula for bar centers that we are interested in:
# last + half(previous_width) + half(current_width)
pos <- 0.5 * (cumsum(w) + cumsum(c(0, w[-length(w)])))
ggplot() +
geom_bar(aes(x = pos, width = w, y = y, fill = x), stat = "identity") +
scale_x_continuous(labels = x, breaks = pos)

enter image description here

关于r - 如何使ggplot2中的可变条宽不重叠或间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688376/

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