在ggplot上删除未使用的月份

时间:2017-11-11 17:44:06

标签: r dataframe ggplot2 zoo tidyverse

我的数据框只列出了从10月到4月的月份。当我在折线图上绘制这些数据时,它也包括未使用的月份。我只想显示数据中列出的月份,因此图中没有未使用的空间。

我用于剧情的代码

gplot(df,aes(GAME_DATE,DEF_RATING)) + 
   geom_line(aes(y=rollmean(df$DEF_RATING,9, na.pad = TRUE))) + 
   geom_line(aes(y=rollmean(df$OFF_RATING,9,na.pad = TRUE)),color='steelblue')

enter image description here

示例数据

    GAME_DATE OFF_RATING DEF_RATING
       <dttm>      <dbl>      <dbl>
 1 2017-04-12      106.1      113.1
 2 2017-04-10      107.1      100.8
 3 2017-04-08      104.4      105.1
 4 2017-04-06      116.1      105.9
 5 2017-04-04      116.9      116.0

2 个答案:

答案 0 :(得分:1)

ggplot2不允许断轴,因为这些轴可能会产生误导。但是,如果您仍想继续此操作,则可以使用刻面模拟断轴。为此,请创建一个分组变量来标记每个&#34;岛&#34;其中数据与唯一的组代码一起出现,然后由这些组代码进行分面。

此外,在绘图之前,数据应转换为长格式,这样您只需拨打一次geom_line即可获得两条单独的彩色线条。将列映射到aes内的颜色也会自动生成图例。

这是假数据的一个例子:

library(tidyverse)

# Fake data
set.seed(2)
dat = data.frame(x=1950:2000, 
                 y1=c(cumsum(rnorm(30)), rep(NA,10), cumsum(rnorm(11))),
                 y2=c(cumsum(rnorm(30)), rep(NA,10), cumsum(rnorm(11))))

dat %>% 
  # Convert to long format
  gather(key, value, y1:y2) %>% 
  # Add the grouping variable
  group_by(key) %>% 
  mutate(group=c(0, cumsum(diff(as.integer(is.na(value)))!=0))) %>% 
  # Remove missing values
  filter(!is.na(value)) %>% 
  ggplot(aes(x, value, colour=key)) +
    geom_line() +
    scale_x_continuous(breaks=seq(1950,2000,10), expand=c(0,0.1)) +
    facet_grid(. ~ group, scales="free_x", space="free_x") +
    theme(strip.background=element_blank(),
          strip.text=element_blank())

enter image description here

答案 1 :(得分:0)

您可以尝试使用&#34; scale_x_date()&#34;来划分x轴。对于你现在的日期:

sum