代码之家  ›  专栏  ›  技术社区  ›  Brandon Bertelsen

ggplot和R:随时间变化的两个变量

  •  10
  • Brandon Bertelsen  · 技术社区  · 14 年前

    我想知道如何使x和y,在下面的例子中,数据集被绘制在横轴上的每个帧元素的垂直轴上。如何使用ggplot2?

    x、 y=变量,帧=YYYYMM

    示例数据:

    df <- structure(list(x = c(0.000892333625290767, 0.0161153931761482, 
    0.0188150880795816, 0.0268699106638318, 0.018657330651898, 0.0101065034206662, 
    0.00154410447630379), y = c(1.35172948829027, 0.59654026447333, 
    0.685835030118683, 0.741545898152761, 1.09653338596292, 0.119448208345102, 
    0.104092642854814), frame = c(200912, 201001, 201002, 201003, 
    201004, 201005, 201006)), .Names = c("x", "y", "frame"), row.names = c("1", 
    "2", "3", "4", "5", "6", "7"), class = "data.frame")
    

    我已经能够得到一个画在一条线上,但它似乎没有认识到我的框架是绝对的(不是这样,我也不知道如何改变它这样)。

    p <- ggplot(df, aes(x=frame, y=x))
    p + geom_line()
    
    2 回复  |  直到 14 年前
        1
  •  11
  •   mnel    12 年前

    你需要融化你的数据:

    library(reshape2)
    dfm = melt(df, id.vars='frame')
    ggplot(dfm, aes(x=frame, y=value, colour=variable)) + geom_line()
    

    这就是它对数据帧的作用:

    > dfm
        frame variable        value
    1  200912        x 0.0008923336
    2  201001        x 0.0161153932
    3  201002        x 0.0188150881
    4  201003        x 0.0268699107
    5  201004        x 0.0186573307
    6  201005        x 0.0101065034
    7  201006        x 0.0015441045
    8  200912        y 1.3517294883
    9  201001        y 0.5965402645
    10 201002        y 0.6858350301
    11 201003        y 0.7415458982
    12 201004        y 1.0965333860
    13 201005        y 0.1194482083
    14 201006        y 0.1040926429
    
        2
  •  9
  •   mnel    12 年前

    frame 变量intepreted date(一年中的月份),然后将其转换为日期。

    然后你可以使用 scale_x_date 以及 scales 打包以格式化x轴

    DF <- melt(df, id.vars = 'frame')
    # note that I am arbitrarily setting each month to be the 15th 
    # day of the month, to create a complete date 
    DF$date <- as.Date(paste0(as.character(df$frame), '15'), '%Y%M%d')
    library(scales)
    ggplot(DF, aes(x =frame, y = value, colour = variable))  +  
     geom_line() + 
     scale_x_date('Month', labels = date_format('%b %Y'), breaks = date_breaks('2 months'))
    

    enter image description here