在重叠的条形图中绘制两个数据系列(ggplot2)

时间:2015-07-09 09:06:50

标签: r ggplot2 geom-bar

我想在同一个条形图中绘制两个数据系列(相同类型和数量的度量,但在两个时间点测量)。优选地,第一系列以灰色绘制,第二系列以具有透明度的颜色绘制,使得系列1数据仍然可见。 我的数据格式如下:

MyData = data.frame(
  method=rep(c("A","B","C","D","E"),times=3),
  time1=rnorm(30,10,3),
  time2=rnorm(30,8,2),
  lab=rep(rep(c(1,2,3),each=5),times=2),
  cat=rep(c(1,2),each=15)
  )

为了显示我正在寻找的情节类型,我已经添加了用于绘制下面数据系列1的代码:

p <- ggplot(data = MyData,
            aes(x=lab,
                y=time1,
                fill=method))
p + geom_bar(stat="identity",
             position="dodge",
             alpha=.3) +
  facet_grid(. ~ cat)

最后,哪一个数据系列是灰色的,哪个是彩色的,只要它们相互重叠,并且两者都可见,这并不重要。

欢迎所有建议!

2 个答案:

答案 0 :(得分:1)

只能有一个有效fill_scale,因此我们需要将变量方法映射到其他内容,groupcolor

library(ggplot2)

MyData = data.frame(
  method=rep(c("A","B","C","D","E"),times=3),
  time1=rnorm(30,10,3),
  time2=rnorm(30,8,2),
  lab=rep(rep(c(1,2,3),each=5),times=2),
  cat=rep(c(1,2),each=15)
)

p <- ggplot(data = MyData,
            aes(x=lab)) +
  geom_bar(aes(y=time2,fill=method),
           stat="identity",
           position="dodge",
           alpha=.3
           ) +
  geom_bar(aes(y=time1,group=method),
           stat="identity",
           position="dodge",
           alpha=.3) +
  scale_fill_discrete() +
  facet_grid(. ~ cat)
p

enter image description here

答案 1 :(得分:0)

我一直在考虑添加第二个数据系列的另一种方法。我可以使用geom_point而不是geom_bar添加第二个系列,因为这样可以减少混乱。但是,如何在相应的条上定位点? (即现在这些点都在相同的x轴位置上)。

library(ggplot2)

MyData = data.frame(
  method=rep(c("A","B","C","D","E"),times=3),
  time1=rnorm(30,10,3),
  time2=rnorm(30,8,2),
  lab=rep(rep(c(1,2,3),each=5),times=2),
  cat=rep(c(1,2),each=15)
)

p <- ggplot(data = MyData,
            aes(x=lab)) +
  geom_bar(aes(y=time1,fill=method),
           stat="identity",
           position="dodge",
           alpha=.7
  ) +
  geom_point(aes(y=time2,group=method),
           stat="identity",
           position="dodge",
           alpha=.8,
           size=3) +
  scale_fill_brewer(palette=3) +
  facet_grid(. ~ cat)
p