【问题标题】:Isolate Data Frame from Data Frame for Multiple Time Series Plot为多个时间序列图从数据帧中分离数据帧
【发布时间】:2019-03-08 09:43:29
【问题描述】:

我想在特定压力水平 (press_hpa) 下提取温度 (temp_c)。当我使用 dplyr 过滤我的数据 (dat) 时,我正在创建另一个数据框,其中包含相同的列号 (15) 和不同的观察长度。有很多解决方案可以从列中绘制多个时间序列,但我无法匹配解决方案。如何绘制显示不同级别温度的多个时间序列(x = date,y = temp_c,legend = Press_1000,Press_925,Press_850,Press_700 )?请帮忙..谢谢..

library(ggplot2), 
library(dplyr)
library(reshape2)

setwd("C:/Users/Hp/Documents/yr/climatology/")
dat <- read.csv("soundingWMKD.csv", head = TRUE, stringsAsFactors = F)

str(dat)
'data.frame':   6583 obs. of  15 variables:
 $ X        : int  1 2 3 4 5 6 7 8 9 10 ...
 $ pres_hpa : num  1006 1000 993 981 1005 ...
 $ hght_m   : int  16 70 132 238 16 62 141 213 302 329 ...
 $ temp_c   : num  24 23.6 23.2 24.6 24.2 24.2 24 23.8 23.3 23.2 ...
 $ dwpt_c   : num  23.4 22.4 21.5 21.6 23.6 23.1 22.9 22.7 22 21.8 ...
 $ relh_pct : int  96 93 90 83 96 94 94 94 92 92 ...
 $ mixr_g_kg: num  18.4 17.4 16.6 16.9 18.6 ...
 $ drct_deg : int  0 0 NA NA 190 210 212 213 215 215 ...
 $ sknt_knot: int  0 0 NA NA 1 3 6 8 11 11 ...
 $ thta_k   : num  297 297 297 299 297 ...
 $ thte_k   : num  350 347 345 349 351 ...
 $ thtv_k   : num  300 300 300 302 300 ...
 $ date     : chr  "2017-11-02" "2017-11-02" "2017-11-02" "2017-11-02" ...
 $ from_hr  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ to_hr    : int  0 0 0 0 0 0 0 0 0 0 ...

Press_1000 <- filter(dat,dat$pres_hpa == 1000)
Press_925 <- filter(dat,dat$pres_hpa == 925)
Press_850 <- filter(dat,dat$pres_hpa == 850)
Press_700 <- filter(dat,dat$pres_hpa == 700)
date <- as.Date(dat$date, "%m-%d-%y")

str(Press_1000)
'data.frame':   80 obs. of  15 variables:
 $ X        : int  2 6 90 179 267 357 444 531 585 675 ...
 $ pres_hpa : num  1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 ...
 $ hght_m   : int  70 62 63 63 62 73 84 71 74 78 ...
 $ temp_c   : num  23.6 24.2 24.4 24.2 25.4 24 23.8 24 23.8 24 ...
 $ dwpt_c   : num  22.4 23.1 23.2 22.3 23.9 23.1 23.4 23 23 23.1 ...
 $ relh_pct : int  93 94 93 89 91 95 98 94 95 95 ...
 $ mixr_g_kg: num  17.4 18.2 18.3 17.3 19.1 ...
 $ drct_deg : int  0 210 240 210 210 340 205 290 315 0 ...
 $ sknt_knot: int  0 3 2 3 3 2 4 1 1 0 ...
 $ thta_k   : num  297 297 298 297 299 ...
 $ thte_k   : num  347 350 351 348 354 ...
 $ thtv_k   : num  300 301 301 300 302 ...
 $ date     : chr  "2017-11-02" "2017-11-03" "2017-11-04" "2017-11-05" ...
 $ from_hr  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ to_hr    : int  0 0 0 0 0 0 0 0 0 0 ...

 str(Press_925)
'data.frame':   79 obs. of  15 variables:
 $ X        : int  13 96 187 272 365 450 537 593 681 769 ...
 $ pres_hpa : num  925 925 925 925 925 925 925 925 925 925 ...
 $ hght_m   : int  745 747 746 748 757 764 757 758 763 781 ...
 $ temp_c   : num  21.8 22 22.4 23.2 22.2 20.6 22.4 22 22.4 22.2 ...
 $ ... 'truncated'

all_series = rbind(date,Press_1000,Press_925,Press_850,Press_700)

meltdf <- melt(all_series,id.vars ="date")
ggplot(meltdf,aes(x=date,y=value,colour=variable,group=variable)) + 
geom_line()

【问题讨论】:

    标签: r dataframe ggplot2


    【解决方案1】:

    有两种方法可以解决这个问题。你所追求的可能取决于基本问题(我们不知道)。

    1) 对于每个 data.frame,您都有所有必要的列,您可以使用例如绘制每个源(data.frame)

    ggplot()... +
        geom_line(data = Press_1000, aes(...)) +
        geom_line(data = Press_925, aes(...)) ...
    

    请注意,您必须为每个来源指定颜色,并有一个带有 PITA 的图例。

    2) 将所有 data.frames 合并到一个大对象中,并创建一个附加列,指示数据的来源(观察来自哪个 data.frame)。这将是您当前aes 调用中的映射变量(例如颜色、填充、组)。瞬间传奇。

    【讨论】:

    • 我正在尝试第一种方法并尝试获取图例,ggplot() + geom_line(data = Press_1000, aes(as.Date(date), temp_c), color = "a") + geom_line(data = Press_925, aes(as.Date(date), temp_c), color = "b") + scale_color_manual(name = "Colors", values = c("a" = "blue", "b" = "red")) 然后我得到Error in grDevices::col2rgb(colour, TRUE) : invalid color name 'a' 你能告诉我这个吗? PITA 是什么意思?
    • 对不起,如果我的问题令人困惑,我想生成带有标题、标签和图例的正确时间序列图,但首先我怀疑我隔离列的方式。你只需回答它。你建议的第一种方法很好,第二种方法也很有趣,你的意思是“创建一个额外的列来指示数据的来源(观察来自哪个data.frame)。这将是你的映射变量。 . "
    • @SitiSal 意味着你最终会得到一个长的 data.frame 和例如第一个nrow(Press_1000) 观测值将在新指标列中指定为Press_1000,下一个nrow(Press_975) 将指定为Press_1000,依此类推。
    猜你喜欢
    • 2020-12-04
    • 1970-01-01
    • 2022-01-07
    • 2017-11-15
    • 2021-05-13
    • 2013-11-16
    相关资源
    最近更新 更多