代码之家  ›  专栏  ›  技术社区  ›  89_Simple

条形图中的X轴标签和扩展数据框

  •  0
  • 89_Simple  · 技术社区  · 5 年前

    我的数据

    df <- structure(list(variable = c("main.tmin", "main.tmin", "main.tmin", 
                            "main.tmin", "main.tmin"), 
               coef = c(-23.28653023, 22.98726658, -55.1958095, -30.08524407, 
                        36.22033036), 
               acz = c(101L, 103L, 107L, 113L, 114L)), 
              class = "data.frame", row.names = c(NA, -5L))
    
    library(ggplot2)
    
    ggplot(df, aes(x = acz, y = coef)) + geom_bar(stat = "identity")  
    

    我想做两件事:

    首先我想扩大 df 从101:114开始使用ACZ 没有任何值的值中包含NA。像这样的东西

    final.df <- data.frame(variable = "main.tmin",
                       acz = 101:114, 
                      coef = c(-23.28653, NA, 22.98727, NA, NA, NA, -55.19581, NA, NA, NA, NA, NA, -30.08524, 36.22033))
    
    
    ggplot(final.df, aes(x = acz, y = coef)) + geom_bar(stat = "identity")
    

    然后我要显示X轴上的所有标签,在当前时刻 仅为所选少数显示。

    1 回复  |  直到 5 年前
        1
  •  2
  •   pogibas    5 年前

    填写缺少的范围 acz 你可以使用 complete full_seq 功能从 tidyr . 默认情况下,他们还将 NA 对于其他列。

    library(ggplot2)
    library(tidyr)
    # Using OPs data
    ggplot(complete(df, acz = full_seq(acz, 1)), 
           aes(factor(acz), coef)) + 
        geom_bar(stat = "identity")  
    

    enter image description here


    另一种解决方案是通过传递范围限制将X轴标签直接转换为离散比例:

    ggplot(df, aes(acz, coef)) + 
        geom_bar(stat = "identity") +
        scale_x_discrete(limits = seq(min(df$acz), max(df$acz)))