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