使用 geom_path 和 geom_point 时点与线断开连接。已修复但我没有提供摘要函数,默认为 `mean_se()

Dots disconnected from lines when using geom_path and geom_point .Fixed but I get No summary function supplied, defaulting to `mean_se()

我有以下数据:

structure(list(Expo = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L), .Label = c("DC", "DI"), class = "factor"), Quail = c(5L, 
6L, 16L, 17L, 28L, 29L, 30L, 53L, 54L, 11L, 12L, 46L, 48L, 60L, 
11L, 48L, 6L, 5L, 6L, 18L, 29L, 30L, 53L, 11L, 36L, 46L, 47L, 
60L, 11L, 4L, 5L, 6L, 16L, 17L, 28L, 29L, 30L, 52L, 53L, 54L), 
    Segment = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Position = c(1949L, 
    1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 
    1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 
    1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 
    1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 1949L, 
    1949L, 1949L, 1949L), Freq = c(0.034496, 0.034845, 0.031079, 
    0.020761, 0.037311, 0.047204, 0.062257, 0.100617, 0.022637, 
    0.587758, 0.470607, 0.037855, 0.02897, 0.034457, 0.87815, 
    0.022788, 0.169897, 0.058831, 0.116039, 0.032077, 0.081132, 
    0.09126, 0.051852, 0.896703, 0.09873, 0.054908, 0.027505, 
    0.50293, 0.975181, 0.03713, 0.092243, 0.028103, 0.044125, 
    0.057707, 0.091152, 0.085498, 0.130286, 0.030099, 0.049717, 
    0.070069), day = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L, 3L, 7L, 7L, 7L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
    5L, 1L, 1L, 8L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
    )), row.names = c(NA, -40L), class = "data.frame")

当我运行

ggplot(Expo.Shared.PB1, aes(x=as.numeric(day), y=Freq, color = as.character(Quail))) +
    geom_path()+
    geom_point() +
facet_grid(Expo~.)

它给了我以下(不正确的)情节。

我解决了将 stat="summary" 添加到两个 geoms 的问题,但在这样做时它给了我以下消息: 未提供汇总函数,默认为 `mean_se()

ggplot(Expo.Shared.PB1, aes(x=as.numeric(day), y=Freq, color = as.character(Quail))) +
  geom_path(stat = "summary")+
  geom_point(stat = "summary") +
  facet_grid(Expo~.)

输出:

剧情好像是我要找的,现在:

stat="summary" 到底在做什么?绘制的值是否根据原始值进行了修改?可以忽略该消息吗? (我确定不是)。

好的。我想我看到了这个问题。 [ 将“正确”的图表与“不正确”的图表进行比较很有帮助! :)]

geom_path 简单地“连接点”。它获取数据集中的点,并按照它们出现的顺序将它们连接起来。我的第一个想法是您的数据集没有按您预期的方式排序。所以,以Quail == 11为例:

Expo.Shared.PB1 %>% filter(Quail == 11)
# A tibble: 4 x 6
  Expo  Quail Segment Position  Freq   day
  <fct> <int>   <int>    <int> <dbl> <int>
1 DC       11       2     1949 0.588     3
2 DC       11       2     1949 0.878     7
3 DC       11       2     1949 0.897     5
4 DC       11       2     1949 0.975     8

的确如此。所以解决方法很简单。在绘图之前将数据排序为您想要的顺序:

Expo.Shared.PB1 %>% 
  arrange(Quail, day) %>% 
  ggplot(aes(x=as.numeric(day), y=Freq, color = as.character(Quail))) +
    geom_path()+
    geom_point() +
    facet_grid(Expo~.)

我认为这是你想要的,而不需要使用 stat="summary"

那么,为什么 stat="summary" 给了你想要的东西,尽管有警告?我在这里猜测,但这是我的理论。 stat="summary" 显示按 x-values 分组的 y-values 的任意摘要。为此,从逻辑上讲,它必须计算 y-values 子集的汇总统计数据。这样做的明显方法是使用 group_by。现在,not at all obvious是否group_by在分组时对数据进行排序。我的猜测是,在这种情况下,它确实排序了。所以你得到你想要的顺序作为对 stat="summary".

的意外调用 by-product

PS:要让 Quail 的值以数字顺序而不是字典顺序出现,请使用 color=as.factor(Quail)(并使用 scale_color_discrete(name="Quail") 调整图例标题,如果必要的)。