在 R 中的 ggplot 中指定轴标签时显示所有数据点

Show all datapoints while specifying axis labels in ggplot in R

我正在使用 ggplot 创建散点图。我可以使用以下代码创建散点图。

ggplot(df2, aes(x = date, y = mean, color = NULL)) + 
  geom_point(position = "jitter") +
  labs(title = "ShotSpotter incidents around July 4th", 
       x = "Day of year", y = "Mean daily gunshots") + 
  labs(fill = "Treatment Status") + 
  geom_segment(aes(x = "07-01", xend = "07-01", y = 0, yend = 50), colour = "red") 

我想更改 x 轴上的标签,以便它们更易于阅读。当我尝试使用 scale_x_discrete() 这样做时,大多数数据点都消失了,除了那些对应于现在标记在 x 轴上的值的数据点。

ggplot(df2, aes(x = date, y = mean, color = NULL)) + 
  geom_point(position = "jitter") +
  labs(title = "ShotSpotter incidents around July 4th", 
       x = "Day of year", y = "Mean daily gunshots") + 
  labs(fill = "Treatment Status") + 
  geom_segment(aes(x = "07-01", xend = "07-01", y = 0, yend = 50), colour = "red") + 
  scale_x_discrete(limits = c("05-01", "06-01", "07-01", "08-01", "09-01"),
                   labels = c("May 1", "June 1", "July 1", "Aug 1", "Sept 1"))

如何保留第二张图中的标签并包含第一张图中显示的所有数据点?

Data using dput(): 

structure(list(date = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 
8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 
34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 
47L, 48L, 49L, 50L, 51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 
60L, 61L, 62L, 63L, 64L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 
76L, 77L, 78L, 79L, 80L, 81L, 82L, 83L, 84L, 85L, 86L, 87L, 88L, 
89L, 90L, 91L, 92L, 93L, 94L, 95L, 96L, 97L, 98L, 99L, 100L, 
101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L, 109L, 110L, 111L, 
112L, 113L, 114L, 115L, 116L, 117L, 118L, 119L, 120L, 121L, 122L, 
123L, 124L), .Label = c("05-01", "05-02", "05-03", "05-04", "05-05", 
"05-06", "05-07", "05-08", "05-09", "05-10", "05-11", "05-12", 
"05-13", "05-14", "05-15", "05-16", "05-17", "05-18", "05-19", 
"05-20", "05-21", "05-22", "05-23", "05-24", "05-25", "05-26", 
"05-27", "05-28", "05-29", "05-30", "05-31", "06-01", "06-02", 
"06-03", "06-04", "06-05", "06-06", "06-07", "06-08", "06-09", 
"06-10", "06-11", "06-12", "06-13", "06-14", "06-15", "06-16", 
"06-17", "06-18", "06-19", "06-20", "06-21", "06-22", "06-23", 
"06-24", "06-25", "06-26", "06-27", "06-28", "06-29", "06-30", 
"07-01", "07-02", "07-03", "07-04", "07-05", "07-06", "07-07", 
"07-08", "07-09", "07-10", "07-11", "07-12", "07-13", "07-14", 
"07-15", "07-16", "07-17", "07-18", "07-19", "07-20", "07-21", 
"07-22", "07-23", "07-24", "07-25", "07-26", "07-27", "07-28", 
"07-29", "07-30", "07-31", "08-01", "08-02", "08-03", "08-04", 
"08-05", "08-06", "08-07", "08-08", "08-09", "08-10", "08-11", 
"08-12", "08-13", "08-14", "08-15", "08-16", "08-17", "08-18", 
"08-19", "08-20", "08-21", "08-22", "08-23", "08-24", "08-25", 
"08-26", "08-27", "08-28", "08-29", "08-30", "08-31", "09-01"
), class = "factor"), mean = c(13, 15, 16.5, 17.6666666666667, 
14.5, 13.3333333333333, 11.8333333333333, 13, 13, 14.3333333333333, 
13.8333333333333, 15.5, 11.1666666666667, 15, 12.5, 15.6666666666667, 
14.5, 10.5, 11.6666666666667, 17.5, 14.5, 13, 14.6666666666667, 
15.6666666666667, 21.3333333333333, 30.6666666666667, 18.5, 17.5, 
13.5, 18.5, 13.3333333333333, 14.5, 14.8333333333333, 9.66666666666667, 
15.8333333333333, 13.5, 20.5, 16.1666666666667, 15.1666666666667, 
14.8333333333333, 15.3333333333333, 14.1666666666667, 14.5, 13.6666666666667, 
20.1666666666667, 17.8333333333333, 22.3333333333333, 15.8333333333333, 
15.5, 16.1666666666667, 15, 20, 20.8333333333333, 20.8333333333333, 
25, 21.1666666666667, 18.1666666666667, 27, 19.5, 19.5, 19.6666666666667, 
25.6666666666667, 36.8333333333333, 46.6666666666667, 40.5, 21.3333333333333, 
16.3333333333333, 18, 20.1666666666667, 22.6666666666667, 16.8333333333333, 
13.8333333333333, 14.5, 14.1666666666667, 16.5, 15.1666666666667, 
15.1666666666667, 13.3333333333333, 13.3333333333333, 12.6666666666667, 
12.8333333333333, 12.3333333333333, 16.5, 19.6666666666667, 16.3333333333333, 
10.6666666666667, 13.1666666666667, 17.5, 10.3333333333333, 15.5, 
12.1666666666667, 14.3333333333333, 13.8333333333333, 11.6666666666667, 
13, 10.6666666666667, 17.5, 19.3333333333333, 12.6666666666667, 
12.5, 12.5, 13.5, 15.8333333333333, 13.5, 15.6666666666667, 16.3333333333333, 
14.5, 13.8333333333333, 14.3333333333333, 11, 13.3333333333333, 
23.8333333333333, 14.1666666666667, 13.5, 13.3333333333333, 13.3333333333333, 
14, 10.6666666666667, 14.3333333333333, 13.3333333333333, 13.1666666666667
)), class = "data.frame", row.names = c(NA, -121L))
df2$date <- as.Date(paste0("2000-", as.character(df2$date)))
ggplot(df2, aes(x = date, y = mean, color = NULL)) + 
  geom_point(position = "jitter") +
  labs(title = "ShotSpotter incidents around July 4th", 
       x = "Day of year", y = "Mean daily gunshots") + 
  labs(fill = "Treatment Status") + 
  geom_segment(aes(x = as.Date("2000-07-01"), xend = as.Date("2000-07-01"), y = 0, yend = 50), colour = "red") +
  scale_x_date(labels = scales::date_format("%b-%d"))

这需要两个更改:as.Date(我假设 2000 年只是为了 某事 ),并更改 geom_segment 所以xxendDate 个对象。

我们可以使用

library(dplyr)
library(lubridate)
library(ggplot2)
df2 %>% 
   mutate(date = mdy(date, truncated = 2)) %>% 
   ggplot(aes(x = date, y = mean, color = NULL)) +  
    geom_point(position = "jitter") +      
    labs(title = "ShotSpotter incidents around July 4th", 
          x = "Day of year", y = "Mean daily gunshots") + 
    labs(fill = "Treatment Status") + 
    geom_segment(aes(x = mdy('07-01', truncated = 2), 
                    xend = mdy('07-01', truncated = 2), y=0, yend = 50), colour = 'red') +
   scale_x_date(labels = scales::date_format("%b-%d"))

-输出