ggplot2:与ticks不对应的网格线,还是添加自定义网格?

时间:2014-01-12 02:52:44

标签: r ggplot2

这是我在ggplot2: Adding secondary transformed x-axis on top of plot的问题的后续行动,其中我使用一个图中的轴作为另一个图上的顶轴。问题是这两个图的刻度和网格不会相互对齐,因此使用另一个图顶部的一个图的轴(以及相关的网格和数据)意味着底部轴与网格不匹配

我遇到了一个解决方法,但它需要首先构建一个图表,其中x轴刻度与网格线不匹配。我可以定义网格和刻度应该在哪里,但无法弄清楚如何绘制这样的东西。我希望有人可以告诉我我做错了什么。

我意识到网格和刻度标记必须在ggplot中对齐,但我在How can I add a background grid using ggplot2?发现了另一个帖子,它提供了一个非常接近我需要的解决方案。

根据该解决方案,我可以移除网格并使用geom_segment绘制“网格”:

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
              y=c(-35, -25, -15, -35, -35, -35),
              xend=c(185, 185, 185, 170, 177.5, 185),
              yend=c(-35, -25, -15, -15, -15, -15))
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
    geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") +
    theme(panel.grid.minor = element_blank(), 
      panel.grid.major = element_blank())

但是,在该示例中,创建的网格线看起来不像真正的网格,因为它们不会延伸到绘图的边缘。为了使它们看起来像真正的网格线,我需要它们延伸到绘图的边缘。我以为我可以定义位于情节之外的pts,以便在pts之间绘制的线条会延伸到边缘。例如,

pts <- data.frame(x=c(170, 170, 170, 170, 177.5, 185), 
              y=c(-35, -25, -15, -35, -35, -35),
              xend=c(185, 185, 185, 170, 177.5, 185),
              yend=c(-35, -25, -15, -15, -15, -15))
ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + scale_x_continuous(limits=c(172.5, 182.5)) + 
  scale_y_continuous(limits=c(-30, -20)) +
  geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") +
  theme(panel.grid.minor = element_blank(), 
       panel.grid.major = element_blank())

但是,由于点位于绘图之外,因此ggplot会删除缺失值并且不绘制线条。 有谁能告诉我是否有办法让这项工作?或者,有人能告诉我是否有更好的方法来做我想做的事情?

感谢!!!

1 个答案:

答案 0 :(得分:1)

为确保未删除绘图区域外的点,请在coord_cartesian()内设置绘图限制(将“缩放”您的绘图),而不是scale_..()函数内的绘图限制(裁剪所有数据)在该地区之外)

ggplot(quakes, aes(long, lat)) + geom_point(shape = 1) + 
  geom_segment(data=pts, aes(x, y, xend=xend, yend=yend), color="white") +
  theme(panel.grid.minor = element_blank(), 
        panel.grid.major = element_blank())+
  coord_cartesian(xlim=c(172.5, 182.5),ylim=c(-30, -20))

enter image description here