代码之家  ›  专栏  ›  技术社区  ›  Amp

使用R ggplot2删除geom_radial中axis.line和panel.border之间的空格

  •  1
  • Amp  · 技术社区  · 2 周前

    我试图在R ggplot2中使用coord_radial()创建一个简单的径向/极坐标图,它类似于coord_polar,但有更多的选项。下面是一个带有数据的示例图:

    library(ggplot2)
    
    plot_data <- data.frame('xval' = seq(1, 100),
                            'yval' = seq(100, 1))
    
    ggplot(plot_data, aes(x = xval, y = yval))+
      geom_col()+
      scale_y_continuous(expand = c(0, 0))+
      coord_radial(theta = 'x', start = 0)+
      
      theme_void()+
      theme(panel.border = element_rect(fill = NA),
            axis.line.x = element_line())
    

    这会产生一个如下所示的图: enter image description here

    我想做的是删除内圈(由axis.line.x定义)和外矩形(由panel.bield定义)之间的间距。换句话说,我需要圆圈接触到外板。我尝试在scale_x/y_continuous中操纵展开参数并调整theme(),但无济于事。coord_radial()中的“expand”和“clip”参数也没有效果。

    最终目标是,我希望能够将绘图保存为图像,其中边界由圆圈限制而不是外部矩形定义。如果除了删除间距之外还有其他方法可以做到这一点,那也应该奏效。

    提前感谢!

    1 回复  |  直到 2 周前
        1
  •  3
  •   stefan    2 周前

    以下为 this @teunbrand就相关的GH问题发表评论,你可以通过添加以下内容来消除多余的空白

    ggproto(
      NULL, coord_radial("y", start=0, expand = FALSE),
      inner_radius = c(0, 0.5)
    )
    

    你的阴谋。

    library(ggplot2)
    
    plot_data <- data.frame(
      "xval" = seq(1, 100),
      "yval" = seq(100, 1)
    )
    
    ggplot(plot_data, aes(x = xval, y = yval)) +
      geom_col() +
      theme_void() +
      theme(
        panel.border = element_rect(fill = NA, color = "red"),
        axis.line.x = element_line(color = "green")
      ) +
      ggproto(
        NULL, coord_radial("x", start = 0, expand = FALSE),
        inner_radius = c(0, 0.5)
      )
    

    enter image description here