ggplot2中的圆角?

时间:2018-01-11 04:33:19

标签: r ggplot2 themes

这感觉它必须是可能的,但是我无法弄清楚我是否可以在theme()中相对简单地进行,或者必须深入挖掘。

我想围绕我ggplot2地块的情节区域的角落。我该怎么做呢?

问题的灵感来自:https://twitter.com/Hoog10HK/status/951305194809143296

2 个答案:

答案 0 :(得分:10)

您可以使用圆角矩形替换背景grob:

library(ggplot2)
library(grid)

# make a plot with blue background
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() +
  theme(plot.background = element_rect(fill = "#C4E7FF"),
        panel.background = element_blank(),
        plot.margin = margin(20, 20, 20, 20))

# switch out background grob
g <- ggplotGrob(p)
bg <- g$grobs[[1]]
round_bg <- roundrectGrob(x=bg$x, y=bg$y, width=bg$width, height=bg$height,
                          r=unit(0.1, "snpc"),
                          just=bg$just, name=bg$name, gp=bg$gp, vp=bg$vp)
g$grobs[[1]] <- round_bg

# draw both plots side by side
cowplot::plot_grid(p, g, labels = c("rectangular", "rounded"),
                   scale = 0.85, hjust = 0.5, label_x = 0.5)

enter image description here

如果您希望对绘图的其他方面进行舍入,则可以将相同的技巧应用于面板背景,图例背景等。

答案 1 :(得分:3)

多亏了 ggplot2 v3.0.0 中的主题元素子类化,我能够在带有 elementalist::element_rect_round() 的 github 包中实现更通用的方法。 (免责声明:我写了那个 github 包)

library(ggplot2)
library(elementalist) # devtools::install_github("teunbrand/elementalist")

ggplot(mtcars, aes(wt, mpg, colour = factor(cyl))) +
  geom_point() +
  facet_grid(~ cyl) +
  theme(
    legend.background = element_rect_round(radius = unit(0.2, "snpc")),
    legend.key = element_rect_round(radius = unit(0.4, "snpc")),
    panel.background = element_rect_round(radius = unit(1, "cm")),
    strip.background = element_rect_round(radius = unit(8, "pt")),
    plot.background  = element_rect_round(fill = "#C4E7FF")
  )

reprex package (v1.0.0) 于 2021 年 7 月 5 日创建