我想使用 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")
Run Code Online (Sandbox Code Playgroud)
禁食方式可能会通过手动将线条绘制到导出的图像中来添加线条。但是,我更喜欢避免这种情况。
这个Stackoverflow 条目(特别是Henrik的回答)给出了一个潜在的解决方案。但是,我想知道是否有另一种更通用的解决方案(即不需要手动定义线段/线的所有起点和终点)
您可以使用“因子作为数字”技巧在条形中心之间绘制线条(例如,此处所示)。
在您的情况下,这需要与在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())
Run Code Online (Sandbox Code Playgroud)
使线条到达边缘而不是中心需要一些手动工作。如果您真的只有两个这样的堆栈也没关系,但是很难轻松扩展。
在这种情况下,您希望将 .45 添加到 x 轴上的第一个组,并从第二个中减去 0.45。这可能看起来很神奇,但默认值width是数据分辨率的 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())
Run Code Online (Sandbox Code Playgroud)
这不会在 0 处添加一行,因为这些值不在数据集中。这可以添加为沿线的一个段
annotate(geom = "segment", y = 0, yend = 0, x = 1.45, xend = 1.55)
| 归档时间: |
|
| 查看次数: |
632 次 |
| 最近记录: |