【问题标题】:How to superpose barplots in ggplot2如何在ggplot2中叠加条形图
【发布时间】:2016-04-05 08:50:26
【问题描述】:

我想叠加三个条形图。

情节 1:

情节 2:

情节 3:

fzg <- structure(list(start = c(40L, 22L, 37L, 32L, 72L, 41L, 2L, 11L, 57L, 10L, 102L, 40L, 17L, 48L, 86L, 46L, 49L, 7L, 1L, 2L, 13L, 69L, 42L, 31L, 39L, 64L, 39L, 29L, 67L, 5L, 1L, 54L, 32L, 7L, 4L, 67L, 14L, 26L, 20L, 42L, 26L, 57L, 0L, 34L, 114L), period = 1:45,     zug = c(FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,     TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE,     FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE,     FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,     TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE,     TRUE), typ = c(2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 1L,     2L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 1L,     2L, 2L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L,     1L, 2L, 2L, 1L), dyn1 = c(0L, 0L, 0L, 0L, 203L, 0L, 0L, 0L,     111L, 0L, 112L, 0L, 0L, 0L, 191L, 0L, 95L, 0L, 0L, 0L, 0L,     92L, 0L, 0L, 0L, 176L, 0L, 0L, 135L, 0L, 0L, 60L, 0L, 0L,     0L, 110L, 0L, 0L, 0L, 0L, 0L, 185L, 0L, 0L, 148L), dyn2 = c(0L,     0L, 0L, 0L, 203L, 0L, 0L, 0L, 0L, 0L, 223L, 0L, 0L, 0L, 0L,     0L, 286L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 268L, 0L, 0L, 0L,     0L, 0L, 0L, 0L, 0L, 0L, 305L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,     0L, 333L)), .Names = c("start", "period", "zug", "typ", "dyn1", "dyn2"), row.names = c(NA, -45L), class = "data.frame")

x_scale_max <- max(fzg$start, fzg$dyn1, fzg$dyn2)

ggplot(fzg, aes(x=period, y=start, fill=typ)) +   geom_bar(stat="identity", position="dodge") + ylim(0,x_scale_max)
ggplot(fzg, aes(x=period, y=dyn1, fill=typ)) +   geom_bar(stat="identity", position="dodge") + ylim(0,x_scale_max)
ggplot(fzg, aes(x=period, y=dyn2, fill=typ)) +   geom_bar(stat="identity", position="dodge")+ ylim(0,x_scale_max)

生成的条形图应该

  • 以颜色 0 显示图 1 中的所有小条
  • 以颜色 1 显示绘图 1 中所有突出显示的条形
  • 以颜色 2 显示图 2 中添加的部分
  • 以颜色 3 显示图 3 中添加的部分

我设法把所有东西都集中在一个情节中

library(reshape2)
mdat <- melt(fzg[c("start", "period", "dyn1", "dyn2")], measured=c("start","dyn1","dyn2"), id="period")
ggplot(mdat, aes(x=period, y=value, fill=variable)) +   geom_bar(stat="identity", position="stack") + ylim(0,x_scale_max)

但是不同步骤的颜色高亮效果不好。

【问题讨论】:

  • 可以查看here
  • 那么是否有必要将 data.frame 拆分为我想要的多个 data.frames?或者有一个data.frame的解决方案吗? (我想,我可以只复制和创建几个 data.frame,它对我来说似乎不是很优雅,考虑到 ggplot 通常可以使用一个 data.frame)

标签: r plot ggplot2 bar-chart


【解决方案1】:

如果你正在寻找这个 plot
只需修改您的代码:

mdat <- melt(fzg[c("start", "period", "dyn1", "dyn2", "typ")], measured=c("start","dyn1","dyn2"), id=c("period", "typ"))
mdat <- mdat[mdat$value != 0,]
ggplot(mdat, aes(x=period, y=value, fill=interaction(variable,typ))) + geom_bar(stat = "identity")

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2021-03-21
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 2018-09-30
    相关资源
    最近更新 更多