因此,我正在ggplot
中绘制一些时间序列,并在x轴上获得了一些日期/时间数据。 2008年至2016年的数据。问题在于日期不是连续的,例如2008年的最后一个日期是
2008/05/14 19:05:12
下一个日期是2009年,像这样
2009/03/24 10:17:54
在绘制这些图形时,结果如下
为了摆脱空白,我将日期变成因素
dates <- factors(dates)
以获取正确的图。
但是之后,由于
scale_x_continuous(breaks = c(1,1724,2283,5821,8906,10112,10156,14875 ),
labels = c("2008","2009","2010","2011","2012","2013","2014","2015"))
如何更改它们?
答案 0 :(得分:1)
这会引发一些问题,解决方案实际上取决于您要查找的内容。我建议您到目前为止发布一些示例数据和代码,以获得更精确的答案,但是与此同时这是有可能的:
您的上图没有显示连续的刻度(尽管看起来像),而是一个离散的刻度,其级别数对应于唯一的日期观测值。由此产生两个问题:
scale_x_continuous
不会成功,因为年假不会平均分布如果您要显示的是逐年变化,则可以将所有数据分类到每年的“箱”中并绘制:
library(tidyverse)
library(lubridate)
# creating random data
df <- tibble(date = as_datetime(runif(1000, as.numeric(as_datetime("2001/01/24 09:30:43")), as.numeric(as_datetime("2006/02/24 09:30:43")))))
df["val"] <- rnorm(nrow(df), 25, 5)
# use lubridate to extract year as new variable, and plot grouped years
df %>%
mutate(year = factor(year(date))) %>%
ggplot(aes(year, val)) +
geom_point(position = "jitter")
另一种可能是使用色标来按年份记录您的分组,保持所有日期井然有序,但要消除差距(因此不使用连续的x轴标尺):
df %>% # begin by simulating a data 'gap'
filter(date>as_datetime("2003/07/24 09:30:43")|date<as_datetime("2002/09/24 09:30:43")) %>%
mutate(year = factor(year(date)), # 'year' to select colour
date = factor(date)) %>%
ggplot(aes(date, val, col = year)) +
geom_point() +
theme(axis.ticks.x = element_blank(), # removes all ticks and labels, as too many unique times
axis.text.x = element_blank())
如果上述两种方法都没有帮助,请在下面评论您所要寻找的任何内容,我会帮忙的!
编辑:最后一个想法,您可以创建一系列看不见的点,作为轴刻度的中断点:
blank_labels <- tibble(date = as_datetime(c("20020101 000000",
"20030101 000000",
"20040101 000000",
"20050101 000000",
"20060101 000000")),
col = "NA", val = 0)
df2 <- df %>%
filter(date>as_datetime("2003/07/24 09:30:43")|date<as_datetime("2002/09/24 09:30:43")) %>%
mutate(col = "black") %>%
bind_rows(blank_labels) %>%
mutate(date_fac = factor(date))
tick_values <- left_join(blank_labels, df2, by = c("date", "col"))
df2 %>%
ggplot(aes(date_fac, val, col = col)) +
geom_point() +
scale_x_discrete(breaks = tick_values$date_fac, labels = c("2002", "2003", "2004", "2005", "2006")) +
scale_color_identity()