代码之家  ›  专栏  ›  技术社区  ›  Sylvia Rodriguez

在boxplot上绘制矩形(r中的ggplot2)

  •  0
  • Sylvia Rodriguez  · 技术社区  · 6 年前

    以mtcars数据为例,我生成了一个boxplot并希望添加矩形。这是我的全部密码。

     library(ggplot2)
     d=data.frame(x1=c(1,3,1,5,4), x2=c(2,4,3,6,6), y1=c(10,10,20,14,30), y2=c(15,20,25,18,35), t=c('a','a','a','b','b'))
     ggplot(mtcars, aes(x = as.factor(mtcars$carb), y = mpg)) + geom_boxplot() + geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=t), color="black", alpha=0.5)
    

    但是,由于美学问题,这不起作用。我不明白为什么,因为上面两个部分各自工作,所以:

     #part 1 (works)
     ggplot(mtcars, aes(x = as.factor(mtcars$carb), y = mpg)) + geom_boxplot()
    
     #part 2 (works)
     ggplot() + geom_rect(data=d, mapping=aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=t), color="black", alpha=0.5)
    

    如果有什么建议,我将不胜感激。谢谢您。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Jon Spring    6 年前

    这里有一个例子说明这是如何工作的。重要的是ggplot期望所有层的x轴不是连续的就是离散的,而不是混合的。(Y轴也是如此。)

    在你的例子中,盒子X轴是一个离散的(AQA),就像你有一个“橙色”的位置和另一个“菠萝”的位置,但是RCT是连续的,比如1, 2, 3。ggplot通常要求您选择一种或另一种;如果需要,您可以将一种强制转换为另一种,但您需要定义如何。即“2”在“菠萝”的左边还是右边?

    所以要让它起作用,你不能 geom_plot 为x轴分层一个因子,至少不需要以某种方式将其转换为数值。在这里,我把它作为起始的原始号码,然后添加一个 group = carb 这样我们就可以得到每个碳水化合物值的方块图,而不是一组中所有的值。

    ggplot(mtcars) + 
      geom_boxplot(aes(x = carb, y = mpg, group = carb)) +
      geom_rect(data=d, aes(xmin=x1, xmax=x2, ymin=y1, ymax=y2, fill=t), color="black", alpha=0.5)
    

    enter image description here

    推荐文章