注释轴ggplot2
Annotate the axis ggplo2
我正在尝试在 ggplot 上创建注释(特别是矩形)。这是我想要得到的:
我试过geom_rect
,但只能在绘图轴内绘制。
我还尝试使用 this post 提到的 annotate_custom
,但是当我尝试使用 xmin = -3(例如)时,它不起作用。
谢谢!
我首先要问的是你想用这个实现什么?这看起来很奇怪,至少在你的例子中是这样。
但是,这是可以做到的。因为你没有提供可重现的例子,所以我有别的东西。这里的目标是关闭面板的剪裁,以便绘制位于其边界之外的元素。
library(ggplot2)
library(grid)
# Create a plot
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
在这里,我添加了一个带有 rect
的矩形。但这也会修改 x 轴和 y 轴,因此我们用 coord_cartesian
修复它们。您不能使用 xlim
,因为这会删除超出范围的数据点。
g <- p + annotate('rect', xmin=-1, xmax=3, ymin=10, ymax=30, fill='blue', alpha=1/3) +
coord_cartesian(xlim=c(1, 4))
# Convert into a graphical object -- a grob
g <- ggplotGrob(g)
# Try printing g
g
是一个对象,它把所有的元素都放在一个类似table的结构中。那么现在,我们在g的layout dataframe中找到panel,然后开始裁剪。
i <- which(g$layout$name == 'panel')
g$layout[i,'clip'] <- 'off'
终于画出grob了:
# grid.newpage()
grid.draw(g)
我正在尝试在 ggplot 上创建注释(特别是矩形)。这是我想要得到的:
我试过geom_rect
,但只能在绘图轴内绘制。
我还尝试使用 this post 提到的 annotate_custom
,但是当我尝试使用 xmin = -3(例如)时,它不起作用。
谢谢!
我首先要问的是你想用这个实现什么?这看起来很奇怪,至少在你的例子中是这样。
但是,这是可以做到的。因为你没有提供可重现的例子,所以我有别的东西。这里的目标是关闭面板的剪裁,以便绘制位于其边界之外的元素。
library(ggplot2)
library(grid)
# Create a plot
p <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
在这里,我添加了一个带有 rect
的矩形。但这也会修改 x 轴和 y 轴,因此我们用 coord_cartesian
修复它们。您不能使用 xlim
,因为这会删除超出范围的数据点。
g <- p + annotate('rect', xmin=-1, xmax=3, ymin=10, ymax=30, fill='blue', alpha=1/3) +
coord_cartesian(xlim=c(1, 4))
# Convert into a graphical object -- a grob
g <- ggplotGrob(g)
# Try printing g
g
是一个对象,它把所有的元素都放在一个类似table的结构中。那么现在,我们在g的layout dataframe中找到panel,然后开始裁剪。
i <- which(g$layout$name == 'panel')
g$layout[i,'clip'] <- 'off'
终于画出grob了:
# grid.newpage()
grid.draw(g)