如何防止ggplot裁剪超出范围的点

时间:2018-06-28 20:05:35

标签: r ggplot2

我正在使用以下代码来尝试保留超出绘图区域边界的geom元素,但似乎仍将其裁剪到绘图区域上方一定距离之外。

g <- ggplot(iris, aes(x = Species, y = Petal.Length)) +
  stat_summary(geom = 'bar', fun.y = mean) +
  geom_point() +
  scale_y_continuous(limits = c(0,8), expand = c(0,0), oob = function(x, ...) x) +
  geom_text(label = 'obText', aes(x = 2, y = 9)) #+ 
  # theme(plot.margin = unit(c(60,5.5,5.5,5.5), "points"),
  #       aspect.ratio = 1)

gb <- suppressWarnings(ggplot_build(g))
gt <- ggplot_gtable(gb)
gt$layout$clip[gt$layout$name=="panel"] <- "off"
grid::grid.newpage()
grid::grid.draw(gt)

关于这是为什么以及如何纠正的任何想法?如果取消注释主题参数,则可以接近所需的大小,但这会更改绘图区域的纵横比。

2 个答案:

答案 0 :(得分:4)

不确定这是否是您要查找的内容,但是可以在clip = 'off'中使用ggplot 3.0.0选项来显示文本

有关更多信息,另请参见此answer

# install.packages("devtools")
# devtools::install_github("tidyverse/ggplot2")

library(ggplot2)

g <- ggplot(iris, aes(x = Species, y = Petal.Length)) +
  stat_summary(geom = 'bar', fun.y = mean) +
  geom_point() +
  scale_y_continuous(limits = c(0,8), expand = c(0,0), oob = function(x, ...) x) +
  geom_text(label = 'obText', aes(x = 2, y = 9), check_overlap = TRUE) +
  # this will allow the text outside of the plot panel
  coord_cartesian(clip = 'off') +
  theme(plot.margin = margin(4, 2, 2, 2, "cm"))
g

reprex package(v0.2.0.9000)于2018-06-28创建。

答案 1 :(得分:0)

如果想查看这些点,则可以更改oob = ...

的值

oob = function(x, ...) x

enter image description here

oob = squish

enter image description here

oob = censor

enter image description here

squishcensorscales软件包的一部分。

请注意,两种情况下的均值均发生变化; squish降低高于6的点的值,censor降低高于6的点的值。