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

R保留行顺序ggplot2 geom_tile

  •  0
  • Stedy  · 技术社区  · 12 年前

    我试图绘制一些分类数据 answer 非常接近我想要做的事情,但是在我的情况下,我在这个例子中看到的国家的地方有日期。如何使用data.frame中的原始行顺序创建绘图?看来,尽管这些因素在 dat melt.data 它们在绘图中没有在y轴上按顺序排列。

    以下是一个可重复的示例:

    library(reshape)
    library(ggplot2)
    
    dat <- data.frame(dates=c("01/01/2002", "09/15/2003", "05/31/2012"), Germany = c(0,1,0), Italy = c(1,0,0))
    melt.data<-melt(dat, id.vars="dates", variable_name="country")
    
    qplot(data=melt.data,
          x=country,
          y=dates,
          fill=factor(value),
          geom="tile")
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Maiasaura    12 年前

    您的问题是日期存储为字符串。看见 str(dat) 用于数据的结构。

    通过添加

    dat$dates <- as.Date(dat$dates,"%m/%d/%Y")
    

    加载dat后,您可以获得原始订单中的日期。

        2
  •  1
  •   mnel    12 年前

    你的问题是 dat$dates 是一个因素,默认情况下 R 已按字典顺序对级别进行了排序。 R 不知道他们是约会对象。

    所以

    levels(dat$dates)
    ## [1] "01/01/2002" "05/31/2012" "09/15/2003"
    

    然后

    order(dat$dates)
    ## [1] 1 3 2
    

    如果你愿意 R 要将这些视为日期,则可以将它们转换为 Date

     dat$dates <- as.Date(as.character(dat$dates), format = '%m/%d/%Y')
    
      # now 
     order(dat$dates)
     ## 1 2 3
    

    这就是你想要的