看板 R_Language 關於我們 聯絡資訊
#ncfile 讀出是一個多維矩陣,你用temp[1:4]當然只會讀出4筆 以下供參 #你可以針對每一次 (1:4)都畫一次,在這裡我不確定你要的操作,我取平均 #OB library(ncdf4) #library(magrittr) #library(lubridate) #library(units) infile <- "D:/Env/air/air.2m.mon.mean.nc" nx0 <- nc_open(infile) print(nx0) air <- ncvar_get(nx0, "air") latx0<- ncvar_get(nx0, "lat") lngx0<- ncvar_get(nx0, "lon") #time<- ncvar_get(nx0, "time") #tattr <- ncatt_get(nx0, "time") #get attributes #units(time) <- make_unit(tattr$units) #datex<- as.POSIXct(time) %>% as.Date(origin="1800-01-01 00:00") #:0.0") #lvl <- ncvar_get(nx0, "level") mair <- apply(air[,,1:4],c(1,2),function(x) mean(x-273.15, na.rm=T)) zt=matrix(mair,ncol=length(latx0),nrow=length(lngx0),byrow=F) image(x=lngx0-180,y=rev(latx0),z=zt[,ncol(zt):1], col = colorRamps::blue2red(128)) #rainbow(128)[50:128]) ※ 引述《AndrewShi (沒有妳的我)》之銘言: : ※ 引述《AndrewShi (沒有妳的我)》之銘言: : : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : [軟體熟悉度]: : : 入門(寫過其他程式,只是對語法不熟悉) : : [問題敘述]: : : 這是一個全球溫度的資料(nc檔),時間總共有467筆,我想利用R畫出前4筆的全球溫度圖 : : ,所以 寫了一個簡單的while迴圈,但到了要image的時候就跑出了這個error,所以想請問大大 : : 們這個error是什麼意思,以及我該如何解決??謝謝~ : : [程式範例]: : : https://i.imgur.com/JlqAFxw.jpg : : https://i.imgur.com/fLzCmiC.jpg : 以下為資料來源與程式碼: : 資料來源: : https://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis2.pressure.html : Air Temperature - Monthly Mean - 按圖示 -->裡面的最後一筆資料 : 程式碼: : rm(list=ls()) : library(ncdf4) : air.nc<-nc_open("C:\\Users\\TOM\\Desktop\\R(資料庫)\\air.2m.mon.mean.nc") : air.nc : "file C:\\Users\\TOM\\Desktop\\R(資料庫)\\air.2m.mon.mean.nc has 5 : dimensions:" : "lon Size:144" : "lat Size:73" : "level Size:17" : "nbnds Size:2" : "time Size:467" : "file C:\\Users\\TOM\\Desktop\\R(資料庫)\\air.2m.mon.mean.nc has 2 variables" : "short air[lon,lat,level,time] Longname:Air temperature Missval:-32767" : "short head[level,time] Longname:Missing Missval:NA" : temp.nc<-nc_open("C:\\Users\\TOM\\Desktop\\R(資料庫)\\air.2m.mon.mean.nc") : temp<-ncvar_get(temp.nc,"air") : temp[temp=="-32767"]<-NA : temp.nc$dim$lon$vals -> lon : temp.nc$dim$lat$vals -> lat : temp.nc$dim$level$vals -> lev : temp.nc$dim$nbnds$vals -> nbnds : temp.nc$dim$time$vals -> time : lat<-rev(lat) : i<-1 : while(i<5){ : print(temp[i]) : i<-i+1 : } : time="i"<-temp[i] : lon<-lon-180 : temp<-(time="i") : temp<-matrix(c("i"=1:4)) : image(lon,lat,matrix(temp,ncol=length(lat),nrow=length(lon),byrow=F)) : library(sp) : library(maptools) : gpclibPermit() : data(wrld_simpl) : plot(wrld_simpl,add=TRUE) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.65.48 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1526354622.A.065.html
AndrewShi: cywhale大~非常謝謝你,想請問你是把前4筆時間的溫度去 05/15 15:04
AndrewShi: 做平均再畫出圖的嗎?!可以請教你如果我想畫出前四筆時 05/15 15:04
AndrewShi: 間各別的溫度圖(4張圖)的話,時間的部分我該怎麼寫呢?? 05/15 15:04
AndrewShi: 謝謝~ 05/15 15:04
cywhale: 被我mark的就是時間 datex[i]就可以抓到你要的日期不是? 05/15 16:28
cywhale: 我順手做了一版data.table + ggplot.. 如果需要可以參考 05/15 16:30
cywhale: https://goo.gl/5jdY7t 05/15 16:31
AndrewShi: 了解~不過我在設定時間(寫迴圈)的時候,還是有出現erro 05/16 17:30
AndrewShi: r,不寫迴圈是可以畫出4張圖,但是我不知道怎麼在image 05/16 17:30
AndrewShi: 裡加上時間的指定,所以畫出來的4張圖感覺都是同一筆 05/16 17:30
AndrewShi: 資料,抱歉,cywhale大,我是因為研究需要用到R,所以 05/16 17:30
AndrewShi: 現在才開始學R(新手),以下是我修改的程式碼和出現的er 05/16 17:30
AndrewShi: ror,如果你有空也願意的話煩請你再幫我看看囉,謝謝你 05/16 17:30
AndrewShi: 真的幫助我很多(已跪XD 05/16 17:30
AndrewShi: https://i.imgur.com/JKidXzW.jpg 05/16 17:32
AndrewShi: https://i.imgur.com/xB8yhpP.jpg 05/16 17:32
cywhale: 在R打? image可以看到此指令參數,並無mfrow,你還多傳 05/16 20:26
cywhale: 一個datex,你要給image哪個參數? datex若是vector 沒有 05/16 20:27
cywhale: datex["i"=1]這種寫法..你必須去看R基礎中關於vector取值 05/16 20:28
cywhale: 我寫的程式應該可以直接run 你可以把值print出來 datex和 05/16 20:29
cywhale: air[,,]第三個維度是相同size, 所以你要哪個日期,比如在 05/16 20:30
cywhale: datex[5]這個日期,取air[,,5]即是所有經緯度當次日期的 05/16 20:31
cywhale: 溫度值... 05/16 20:32
AndrewShi: cywhale大~像是改成這樣(到for迴圈結束)嗎?!不過我改 05/19 02:36
AndrewShi: 成這樣它畫出來的4張圖都是畫在同一個位置... 05/19 02:36
AndrewShi: https://i.imgur.com/hh69JQW.jpg 05/19 02:37
cywhale: https://goo.gl/5jdY7t 最末更新 par設定畫布要在loop外 05/19 11:20
cywhale: 你單畫一張,不用取平均 air[,,i]取值即可 05/19 11:21
cywhale: 畫地圖的方式用你原來的即可 我只是用我慣用的 05/19 11:21
cywhale: 要給code時最好還是有文字連結 有很多免費資源可以貼code 05/19 11:22
cywhale: 只貼圖檔,只怕許多版上朋友看了也懶得重打難以測試 05/19 11:23
cywhale: 另外連結ggplot 也更新加上地圖 效果就跟你要的for-loop 05/19 11:36
cywhale: 一樣,不考慮跳ggplot嗎XD 05/19 11:37
AndrewShi: 了解~不過cywhale大,不取平均畫出來的全球溫度圖色調 05/19 19:11
AndrewShi: 都是一樣的,感覺怪怪的,那個mean(x-273)是指把第一 05/19 19:11
AndrewShi: 筆時間的溫度扣掉所有時間的平均還是指其他意思呢??另 05/19 19:11
AndrewShi: 外我只知道ggplot2是R裡面的一個繪圖套件,它跟R內建 05/19 19:11
AndrewShi: 的繪圖功能有什麼差別嗎 :)??謝謝~ 05/19 19:11
cywhale: 範例用i in 1:4 時間相近 畫出來當然都很像>< ..如果你 05/19 20:03
cywhale: 隨意找幾個時間點畫就不會像了比如i in c(1,101,224,455) 05/19 20:04
cywhale: nc檔給的是degree K 我改成degree C 所以-273不是? R是以 05/19 20:06
cywhale: 向量操作為思維,所以x是向量就會全減,你若懷疑就自己 05/19 20:07
cywhale: print值debug看看,就畫圖而言也不一定要減,配色是相對 05/19 20:08
cywhale: 值區段去配..ggplot2太多教學,我就不贅言,有興趣網路找 05/19 20:09
AndrewShi: cywhale大~我的意思是有加mean(x-273)時,畫出來的前四 05/19 23:04
AndrewShi: 筆時間的圖是有差別的,但如果把mean(x-273)去掉後,畫 05/19 23:04
AndrewShi: 出來的前四筆時間的圖色調都一樣(全球都單一色調),所 05/19 23:04
AndrewShi: 以我不太懂mean是做什麼的平均@@,以及不加mean全球的 05/19 23:04
AndrewShi: 溫度應該也不可能是單一溫度(色調),而至於ggplot2, 05/19 23:04
AndrewShi: 我不是伸手要教學,只是好奇一樣都是畫出一樣的圖但卻 05/19 23:04
AndrewShi: 要打更多的程式碼,是因為它的繪圖功能比較強大能把圖 05/19 23:04
AndrewShi: 畫的更精細嗎?!只是好奇它跟R內建的繪圖功能有什麼差別 05/19 23:04
AndrewShi: 而已~謝謝 05/19 23:04