【问题标题】:How to prepare zoo object with mutiple columns for ggplot2?如何为ggplot2准备具有多列的动物园对象?
【发布时间】:2018-02-23 19:10:39
【问题描述】:

我想绘制一个动物园对象的多列图。例如,

 df <- zoo(data.frame(A = c(2.3, 4.4, 5.2),
                      B = c(5.5, 1.7, 4.4),
                      C = c(2.5, 7.7, 3.3)),
                      order.by = c(as.Date("2010-10-1"),
                                   as.Date("2010-10-5"),
                                   as.Date("2010-10-7")))

给出:

              A   B   C
 2010-10-01 2.3 5.5 2.5
 2010-10-05 4.4 1.7 7.7
 2010-10-07 5.2 4.4 3.3

转换zoo对象并创建ggplot所需的长数据形式的一种丑陋方法是:

 var.vec <- NULL
 val.vec <- NULL
 num.rows <- nrow(df)
 for(i in 1:ncol(df))
 {
   v <- rep(colnames(df)[i], num.rows)
   var.vec <- c(var.vec, v)
   val.vec <- c(val.vec, df[, i])
 }
 df1 <- data.frame(x = time(new.ticker.prices),
                  val = val.vec,
                  variable = var.vec,
                  stringsAsFactors = FALSE)

和ggplot情节声明:

 ggplot(data = df1, aes(x=x, y=val)) + geom_line(aes(colour=variable))

这行得通。

为了尝试使用更优雅的解决方案,我尝试将 df 转换为数据框对象并使用“reshape2”包中的“melt”,但我无法让它工作。

有没有更优雅的方式使用 ggplot 绘制 zoo 对象 df 的列?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    zoo 包提供函数autoplot.zoo。试试这个

    library(zoo)
    autoplot.zoo(df, facets = NULL)
    

    【讨论】:

    • 哎呀。是的,这行得通!不知道这个功能。
    • 没有?看起来像您问题中的情节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多