在多个图层中添加分组的geom_vline

5

我正试图添加垂直线,这些线应该针对每个绘图面是具体的。我尝试按照与绘图数据分组相同的过程对geom_vline数据进行分组来实现此目的。垂直线数据来自于不同的数据帧而非点。以下代码是我所拥有的:

plots <-
  dd %>%
   ggplot(aes(Date, TDS)) +
    theme_bw() +
    geom_point(aes(group = Well, color = Well), size = 1) +
    ggtitle(paste("WMA A-AX TDS")) +
    ylab("mg/L") +
    geom_smooth(aes(group= Well), method = "loess", color = "black",  se = FALSE) +
    geom_vline(data = cpdates, aes(group = Well_LOC, xintercept=as.numeric(CPT_DATE)), color ="blue", lwd=0.5, lty=1) +
    facet_grid(Well~.)

然而,这段代码没有对geom_vline数据进行分组,而是将所有线都放在了所有面板中。点和LOESS线的分组可以正常工作,那么为什么vlines不能呢?

Example plot with excess vertical lines in facets

我尝试了很多方法来解决这个问题,但都没有成功。非常感谢任何建议。


如果你想使用ggplot()进行分面,那么在cpdates$Well中需要与dd$Well完全相同的值。 - Nate
1
这些值是相同的,但两者之间行数不同。我会尝试加强它们,看看能否使其正常工作。 - mountainscaler
1个回答

6

分面图不使用组美学。这个图表是在Well上进行分面,因此cpdates需要一个Well变量。

以下是一些虚拟数据,可用于复制问题图表。

library('ggplot2')
library('dplyr')

cpdates <- data.frame(
  Well_LOC = c(4, 5, 6, 8),
  CPT_DATE = c(1, 2, 3,4))

dd <- data.frame(
  Date = mpg$displ,
  TDS = mpg$cty,
  Well = mpg$cyl)


dd %>%
 ggplot(aes(Date, TDS)) +
  theme_bw() +
  geom_point(aes(group = Well, color = Well), size = 1) +
  ggtitle(paste("WMA A-AX TDS")) +
  ylab("mg/L") +
  geom_smooth(aes(group = Well), method = "loess", color = "black",  se = FALSE) +
  geom_vline(data = cpdates, aes(group = Well_LOC, xintercept=as.numeric(CPT_DATE)), color ="blue", lwd=0.5, lty=1) +
  facet_grid(Well~.)

糟糕的图表

Well添加到cpdates中可以解决问题。我们还可以摆脱group美学。

cpdates$Well = cpdates$Well_LOC

dd %>%
 ggplot(aes(Date, TDS)) +
  theme_bw() +
  geom_point(aes(group = Well, color = Well), size = 1) +
  ggtitle(paste("WMA A-AX TDS")) +
  ylab("mg/L") +
  geom_smooth(method = "loess", color = "black",  se = FALSE) +
  geom_vline(data = cpdates, aes(xintercept=as.numeric(CPT_DATE)), color ="blue", lwd=0.5, lty=1) +
  facet_grid(Well~.)

fixed plot


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接