这是我在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会删除缺失值并且不绘制线条。 有谁能告诉我是否有办法让这项工作?或者,有人能告诉我是否有更好的方法来做我想做的事情?
感谢!!!
答案 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))