r - 如何使用 ggplot2 在条形图上叠加一条线?

标签 r ggplot2

我正在寻找一种方法来绘制包含两个不同系列的条形图,隐藏其中一个系列的条形图,而是有一条线(如果可能,平滑)穿过隐藏系列条形图的顶部(类似于如何在直方图上叠加频率多项式)。我已经尝试了下面的例子,但似乎遇到了两个问题。

首先,我需要按组汇总(总计)数据,其次,我想将其中一个系列 (df2) 转换为一行。

df <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,1,2,2,3,3))  
df2 <- data.frame(grp=c("A","A","B","B","C","C"),val=c(1,4,3,5,1,2))  
ggplot(df, aes(x=grp, y=val)) +   
    geom_bar(stat="identity", alpha=0.75) +  
    geom_bar(data=df2, aes(x=grp, y=val), stat="identity", position="dodge")

最佳答案

您可以通过多种方式获得组总数。其中之一是

with(df, tapply(val, grp, sum))

为简单起见,您可以将条形和线条数据合并为一个数据集。
df_all <- data.frame(grp = factor(levels(df$grp)))
df_all$bar_heights <- with(df, tapply(val, grp, sum))
df_all$line_y <- with(df2, tapply(val, grp, sum))

条形图使用分类 x 轴。要覆盖一条线,您需要将轴转换为数字。
ggplot(df_all) +
   geom_bar(aes(x = grp, weight = bar_heights)) +
   geom_line(aes(x = as.numeric(grp), y = line_y))

enter image description here

关于r - 如何使用 ggplot2 在条形图上叠加一条线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4332274/

相关文章:

r - 如何清理 R 中的 Twitter 数据?

r - ggplot2:将图例移到角落但将其保留在边距中?

r - 在ggplot2中绘图后如何更改数据子集的颜色/形状/大小

r - ggplot2:将颜色固定为因子水平

r - 在多面 ggplot 中绘制排序值

r - 将大括号 {} 替换为引号 "

r - 如何做条件 NA 填充 R 数据框

r - 使用 grid.arrange 更改多图 ggplot2 中的标题

r - geom_polygon 的渐变填充

r - 拼凑而成的空白绘图空间与所有其他绘图的大小相同