得到一个躲闪的条形图?

时间:2011-08-24 03:46:57

标签: r graph ggplot2

我刚刚看到这段代码让我绘制了多个纵坐标(我知道它在社区中是一个不好的概念,但我需要这样做来比较不同的指标)。由于这不能在ggplot2中固有地完成,我想知道我是否可以调整以下代码来做我需要的:

twoord.plot(2:10,seq(3,7,by=0.5)+rnorm(9),
  1:15,rev(60:74)+rnorm(15),xlab="Sequence",
  ylab="Ascending values",rylab="Descending values",
  main="Plot with two ordinates - bars on the left",
  type=c("bar","l"),lcol=3,rcol=4)

绘制以下内容:

enter image description here

我正在寻找的是将多个条形图并排绘制。我尝试用type=c("bar", "l")替换type=c("bar", "bar"),但这给了我重叠的条形码。我想要绘制的确切数据如下:

Category    SubCat  Value
A           Cat1    0.1
B           Cat1    0.2
A           Cat2    0.3
B           Cat2    0.24
A           Cat3    13
B           Cat3    41
A           Cat4    60
B           Cat4    146

我希望(Cat1,Cat2)下的(A,B)在左边有刻度,而(Cat3,Cat4)下的(A,B)在右边有刻度,在A和B下有所有条分别组合在一起。有人可以告诉我怎么做吗?

1 个答案:

答案 0 :(得分:4)

以下内容可能与您使用ggplot2时的距离非常接近:

d <- read.table(textConnection("Category    SubCat  Value
A           Cat1    0.1
B           Cat1    0.2
A           Cat2    0.3
B           Cat2    0.24
A           Cat3    13
B           Cat3    41
A           Cat4    60
B           Cat4    146"),header = TRUE, sep="")

d$grp <- rep(c('Cat1 - Cat2','Cat3 - Cat4'), each = 4)
ggplot(d,aes(x = Category, y = Value)) + 
    facet_wrap(~grp, scales = "free_y") + 
    geom_bar(aes(fill = SubCat), position = "dodge")

enter image description here

通过刻面和允许ggplot2分别设置轴来实现“双y轴”。我确信使用基本图形可以更接近您想要的东西,但需要更多考虑。

编辑

这是使用twoord.plot的黑客攻击。采取了相当多的摆弄,但我从来没有使用过这个功能,所以可能有一个更简单的方法:

par(xaxt = "n") 
twoord.plot(ly = d$Value[1:4],ry = d$Value[5:8], rx = c(9,11,13,15), lx = c(1,3,5,7),
            type = c('bar','bar'), 
            xlim = c(0,16),
            lylim = c(0,0.35),rylim = c(12,150))
par(xaxt="s")           
axis(1, at = c(1,3,5,7,9,11,13,15),
        labels = paste(d$Category,d$SubCat,sep=""),
        las = 3)

enter image description here