Re: [問題] dimensions of z are not length(x)(-1)

作者: cywhale (cywhale)   2018-05-15 11:23:39
#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 - 按圖示
作者: AndrewShi (沒有妳的我)   2018-05-15 15:04:00
cywhale大~非常謝謝你,想請問你是把前4筆時間的溫度去做平均再畫出圖的嗎?!可以請教你如果我想畫出前四筆時間各別的溫度圖(4張圖)的話,時間的部分我該怎麼寫呢??謝謝~
作者: cywhale (cywhale)   2018-05-15 16:28:00
被我mark的就是時間 datex[i]就可以抓到你要的日期不是?我順手做了一版data.table + ggplot.. 如果需要可以參考https://goo.gl/5jdY7t
作者: AndrewShi (沒有妳的我)   2018-05-16 17:30:00
了解~不過我在設定時間(寫迴圈)的時候,還是有出現error,不寫迴圈是可以畫出4張圖,但是我不知道怎麼在image裡加上時間的指定,所以畫出來的4張圖感覺都是同一筆資料,抱歉,cywhale大,我是因為研究需要用到R,所以現在才開始學R(新手),以下是我修改的程式碼和出現的error,如果你有空也願意的話煩請你再幫我看看囉,謝謝你真的幫助我很多(已跪XDhttps://i.imgur.com/JKidXzW.jpghttps://i.imgur.com/xB8yhpP.jpg
作者: cywhale (cywhale)   2018-05-16 20:26:00
在R打? image可以看到此指令參數,並無mfrow,你還多傳一個datex,你要給image哪個參數? datex若是vector 沒有datex["i"=1]這種寫法..你必須去看R基礎中關於vector取值我寫的程式應該可以直接run 你可以把值print出來 datex和air[,,]第三個維度是相同size, 所以你要哪個日期,比如在datex[5]這個日期,取air[,,5]即是所有經緯度當次日期的溫度值...
作者: AndrewShi (沒有妳的我)   2018-05-19 02:36:00
cywhale大~像是改成這樣(到for迴圈結束)嗎?!不過我改成這樣它畫出來的4張圖都是畫在同一個位置...https://i.imgur.com/hh69JQW.jpg
作者: cywhale (cywhale)   2018-05-19 11:20:00
https://goo.gl/5jdY7t 最末更新 par設定畫布要在loop外你單畫一張,不用取平均 air[,,i]取值即可畫地圖的方式用你原來的即可 我只是用我慣用的要給code時最好還是有文字連結 有很多免費資源可以貼code只貼圖檔,只怕許多版上朋友看了也懶得重打難以測試另外連結ggplot 也更新加上地圖 效果就跟你要的for-loop一樣,不考慮跳ggplot嗎XD
作者: AndrewShi (沒有妳的我)   2018-05-19 19:11:00
了解~不過cywhale大,不取平均畫出來的全球溫度圖色調都是一樣的,感覺怪怪的,那個mean(x-273)是指把第一筆時間的溫度扣掉所有時間的平均還是指其他意思呢??另外我只知道ggplot2是R裡面的一個繪圖套件,它跟R內建的繪圖功能有什麼差別嗎 :)??謝謝~
作者: cywhale (cywhale)   2018-05-19 20:03:00
範例用i in 1:4 時間相近 畫出來當然都很像>< ..如果你隨意找幾個時間點畫就不會像了比如i in c(1,101,224,455)nc檔給的是degree K 我改成degree C 所以-273不是? R是以向量操作為思維,所以x是向量就會全減,你若懷疑就自己print值debug看看,就畫圖而言也不一定要減,配色是相對值區段去配..ggplot2太多教學,我就不贅言,有興趣網路找
作者: AndrewShi (沒有妳的我)   2018-05-19 23:04:00
cywhale大~我的意思是有加mean(x-273)時,畫出來的前四筆時間的圖是有差別的,但如果把mean(x-273)去掉後,畫出來的前四筆時間的圖色調都一樣(全球都單一色調),所以我不太懂mean是做什麼的平均@@,以及不加mean全球的溫度應該也不可能是單一溫度(色調),而至於ggplot2,我不是伸手要教學,只是好奇一樣都是畫出一樣的圖但卻要打更多的程式碼,是因為它的繪圖功能比較強大能把圖畫的更精細嗎?!只是好奇它跟R內建的繪圖功能有什麼差別而已~謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com