绘图功能按边距裁剪

时间:2015-04-12 18:36:40

标签: r plot ggplot2

当我编译下面的MWE时,我发现最大点(3,5)被边缘显着切割/裁剪。

为简单起见,以下示例大幅减少。

在我的实际数据中,如果相应的x轴美学在max x值上,则手动限制我的coord_cartesian会影响以下各项。

  • 点符号
  • 错误栏
  • 通过文本注释插入的统计符号

MWE

library(ggplot2)
library("grid")

print("Program started")

n = c(0.1,2, 3, 5) 
s = c(0,1, 2, 3)  
df = data.frame(n, s)

gg <- ggplot(df, aes(x=s, y=n))
gg <- gg + geom_point(position=position_dodge(width=NULL), size = 1.5) 
gg <- gg + geom_line(position=position_dodge(width=NULL))

gg <- gg + coord_cartesian( ylim = c(0, 5), xlim = c((-0.05)*3, 3));

print(gg)

print("Program complete - a graph should be visible.")

为了正确显示我的数据,我会考虑使用以下任何一种可能的(受到观察到x轴标签本身永远不会被切割的影响)

  1. 使边距透明,以免切割点
    • 除非该点由绘图区域切割而不是边距
  2. 将带有绘图区域的面板放在前面
    • 除非该点由绘图区域切割而不是边距,因此顺序是独立的
  3. 使用xlim = c((-0.05)*3, (3*0.05))扩展轴范围,但实施一些黑客攻击,以便在最大点3之后不显示悬垂轴条?
    • 这就是我原来的方式,但我被告知要在3之后删除悬空,因为这是不可接受的。

1 个答案:

答案 0 :(得分:1)

这是你选择1的意思:

gg <- ggplot(df, aes(x=s, y=n)) +
  geom_point(position=position_dodge(width=NULL), size = 3) +
  geom_line(position=position_dodge(width=NULL)) + 
  coord_cartesian(xlim=c(0,3), ylim=c(0,5))

# Turn of clipping, so that point at (3,5) is not clipped by the panel grob
gg1 <- ggplot_gtable(ggplot_build(gg))
gg1$layout$clip[gg1$layout$name=="panel"] <- "off"
grid.draw(gg1)

enter image description here