代码之家  ›  专栏  ›  技术社区  ›  aaaaa

ggplot2-使用缺少值的数据进行连续绘图[重复]

  •  0
  • aaaaa  · 技术社区  · 7 年前

    假设我有几个 data.frames 每个有2列: month 第1年至第12年 var

    我希望在x轴上绘制所有月份(从一月到十二月)。

    问题是 数据帧

    如何绘制这些显示所有月份的数据?

    下面是一个代码示例

    ####
    set.seed(69)
    
    ### Create sample data
    df_1 = data.frame(month = c(1:5), var = rnorm(5)) # 7 months are missing
    df_2 = data.frame(month = c(1:12), var = rnorm(12)) # year is complete with 12 months
    df_3 = data.frame(month = c(1:3, 8:12), var = rnorm(8)) # gap of 4 months
    df_4 = data.frame(month = c(1:2, 5, 10:12), var = rnorm(6)) # gap of 2 and 5 months
    
    
    ## Make list of data
    df_lst = list(df_1, df_2, df_3, df_4)
    
    ### Plot
    plot_lst = list()
    
    for (i in 1:length(df_lst)) {
        plot_lst[[i]] = ggplot(data=df_lst[[i]], aes(x=month, y=var)) +
            geom_line(size=2) +
            scale_x_discrete(limits=c("Jan","Feb","Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")) +
            labs(title = '') +
            xlab('Months') +
            ylab('Var')
    }
    
    p_grid = cowplot::plot_grid(plotlist = plot_lst, ncol = 1)
    print(cowplot::plot_grid(p_grid,
                             ncol = 1, rel_heights = c(1, 0.05)))
    
    ####
    

    结果如下:

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  0
  •   Roman    7 年前

    不重塑数据的最简单解决方案:

    ggplot(df_4, aes(as.factor(month), var)) + geom_col() +
        scale_x_discrete(limits = c(1:12))
    

    1

    ggplot(df_4, aes(as.factor(month), var, group = 1)) +
    geom_point(stat="summary", fun.y=sum, size = 3) +
    stat_summary(fun.y=sum, geom="line") + 
    scale_x_discrete(limits = c(1:12))
    

    2