gpt4 book ai didi

r - 有没有一种有效的方法可以使用 ggplot2 在堆积条形图中的不同元素之间绘制线条?

转载 作者:行者123 更新时间:2023-12-02 20:21:45 28 4
gpt4 key购买 nike

我想使用 ggplot2 在堆积条形图中的不同元素之间绘制线条。我已经使用 ggplot2 (第一张图)绘制了堆叠条形图,但希望得到类似于第二张图的内容。

dta <- tribble(
~colA, ~colB, ~colC,
"A", "a", 1,
"A", "b", 3,
"B", "a", 4,
"B", "b", 2); dta

ggplot(dta, aes(x = colA, y = colC, fill = colB)) +
geom_bar(stat = "identity")

Fig. 1 Fig. 2

最快的方法可能是通过手动将线条绘制到导出的图像中来添加线条。不过,我更愿意避免这种情况。

这个Stackoverflow entry (特别是 Henrik 的答案)给出了一个潜在的解决方案。但是,我想知道是否有另一种更通用的解决方案(即不需要手动定义线段/线的所有起点和终点)

最佳答案

您可以使用“因子作为数字”技巧在条形中心之间绘制线条(例如 here )。

在您的情况下,这需要与geom_line()中的堆叠结合起来。

ggplot(dta, aes(x = colA, y = colC, fill = colB)) + 
geom_bar(stat = "identity") +
geom_line( aes(x = as.numeric(factor(colA))),
position = position_stack())

enter image description here将线条设置到边缘而不是中心需要一些手动工作。如果您真的只有两个这样的堆栈,那也没关系,但很难轻松扩展。

在本例中,您需要向 x 轴上第一个组添加 0.45,并从第二个组中减去 0.45。这可能看起来很神奇,但默认的宽度是数据分辨率的 90%,所以我使用了 0.9 的一半。

dta = transform(dta, colA_num = ifelse(colA == "A",
as.numeric(factor(colA)) + .45,
as.numeric(factor(colA)) - .45) )


ggplot(dta, aes(x = colA, y = colC, fill = colB)) +
geom_bar(stat = "identity") +
geom_line( aes(x = colA_num),
position = position_stack())

enter image description here

这不会在 0 处添加一行,因为这些值不在数据集中。这可以作为一个片段添加到

annotate(geom = "segment", y = 0, Yend = 0, x = 1.45, xend = 1.55)

关于r - 有没有一种有效的方法可以使用 ggplot2 在堆积条形图中的不同元素之间绘制线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51213169/

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