如何在条形图中定义附加条形的间距?

时间:2019-02-03 18:35:49

标签: r plot

我想并排绘制y1y0及其比率dydy应该在主栏后面以较小的间距出现。 (旋转的)x轴刻度线应位于属于三个的条形图的中心。

一段时间以来,我一直在使用widthspace以及at选项,但是我还不了解其背后的原理。到目前为止,最好的解决方案是为dy添加一个新图,但是,它仍然远非理想。

barplot(rbind(d$y0, d$y1), beside=TRUE, xaxt="n", col=c("darkgrey", "white")
        # , width=c(1, 1, .2)
        , space=c(0, 2)
        )
barplot(d$dy, add=TRUE, width=.2, space=c(19, 25), col="blue", xaxt="n")
box()
axis(1, at=seq(1:7)*4 - 1.5, labels=2000:2006, las=2)

enter image description here

我该如何使用基准图?谁能解释一下如何定义参数?

预期产量

预期输出应该是这样的。

enter image description here

数据

d <- structure(list(y0 = c(837.4, 798.6, 817.9, 882.6, 870.3, 857.9, 
776.6), y1 = c(827.1, 790, 807.7, 871.9, 861.8, 849.5, 768.2), 
    dy = c(122.999761165512, 107.688454795893, 124.709622203203, 
    121.232721504646, 97.6674709870162, 97.9135097330686, 108.163790883338
    )), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "6", "7"))

1 个答案:

答案 0 :(得分:4)

您可以在原始箱线图中添加额外的(蓝色)条,以使其正确对齐。我还要添加一个高度为零的栏,以分隔蓝色栏。为了使刻度线对齐,保存并使用从调用到箱线图的返回值。

BP = barplot(rbind(d$y0, d$y1, rep(0,7), d$dy), beside=TRUE, 
    xaxt="n", width=c(1,1,0.4,0.2), space=c(0, 2),
    col=c("darkgrey", "white", "white", "blue"))
box()
axis(1, at=(BP[1,] + BP[2,])/2, labels=2000:2006, las=2)

Barplot

根据barplot文档

  

如果height是一个矩阵,并且sideside为TRUE,则可以通过以下方式指定空间   两个数字,第一个是同一条形图之间的空格   组,第二组之间的间隔。

因此,我使用了您拥有的space=c(0,2),以使小节之间没有空格,组之间没有2个单位。

关于宽度,我想保持您的原始宽度(两个主色条为1)和0.2为较小的蓝色色条。我尝试将零高度栏的宽度设置为0.2,但它似乎太接近了,因此我将空格栏扩大到了0.4。