繁体   English   中英

如何在ggplot中使垂直和水平线与轴线边界一致

[英]how to make vertical and horizonal line up to the axis boudary in ggplot

我想使用垂直和水平线来标记构面图中的一个点。

但纵横线不能触及轴线边界。

我用一个简单的例子来说明问题。

library(tidyverse)
library(ggh4x)
# data prepared
df = data.frame(
  x = c(1, 2, 3, 4, 10, 20, 30 ,40),
  y = c(1, 2, 3, -1, 10 ,20, 30, -10),
  group = c(1, 1, 1, 1, 2, 2, 2, 2)
)

add.point = data.frame(
  group   = c(1, 2),
  x       = c(1, 10),
  y       = c(1.5, 15),
  x_hline = c(0, 0),
  y_hline = c(1.5, 15),
  x_vline = c(1, 10),
  y_vline = c(0, 0)
)

我尝试了几种方法,例如expand_limits()try scale_x(y)_continuous()coord_cartesian() ,但都失败了。

顺便说一句,我可以忍受y < 0没有出现在情节中。

我的问题是,有没有一种方法可以使垂直线和水平线接触 ggplot 中的轴边界。

(p0 = df %>% 
  ggplot(aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(se = F) +
  facet_wrap(vars(group), scales = 'free')+
  geom_point(data = add.point, aes(x = x, y = y), color = 'red')+
  geom_segment(data = add.point,
               aes(x = x_hline, y = y_hline,
                   xend = x, yend = y), linetype = 'dashed')+
  geom_segment(data = add.point,
               aes(x = x_vline, y = y_vline,
                   xend = x, yend = y), linetype = 'dashed'))


# try expand_limits()
(p1 = p0 + expand_limits(x = 0, y = 0))

# try scale_x(y)_continuous()
(p1 =  p0 + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)))


# try coord_cartesian()
(p1 = p0 + coord_cartesian(ylim = 0))

您可以使用例如-Inf作为段的端点,并使用expand_limits将限制扩展到零:

library(ggplot2)

ggplot(df, aes(x = x, y = y)) +
  geom_point() +
  geom_smooth(se = F) +
  facet_wrap(vars(group), scales = 'free')+
  geom_point(data = add.point, aes(x = x, y = y), color = 'red')+
  geom_segment(data = add.point,
               aes(x = -Inf, y = y_hline,
                   xend = x, yend = y), linetype = 'dashed')+
  geom_segment(data = add.point,
               aes(x = x_vline, y = -Inf,
                   xend = x, yend = y), linetype = 'dashed') +
  expand_limits(x = 0, y = 0)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM