Plot NetCDF文件的数据提取和转换
嘿,伙计们,我使用雪貂来查看存储在NetCDF文件中的一些数据。 然而,我只能绘制所有测量值的数据:雪貂绘制1998年至2004年的数据。因为我不能专注于一年的时间;但是,Ferret不允许我调整轴范围,所以我现在想尝试将数据点提取到.txt或.dat文件中,以便使用GNUPlot查看它们。 以下是文件中存储的数据:Plot NetCDF文件的数据提取和转换,plot,type-conversion,gnuplot,netcdf,ferret,Plot,Type Conversion,Gnuplot,Netcdf,Ferret,嘿,伙计们,我使用雪貂来查看存储在NetCDF文件中的一些数据。 然而,我只能绘制所有测量值的数据:雪貂绘制1998年至2004年的数据。因为我不能专注于一年的时间;但是,Ferret不允许我调整轴范围,所以我现在想尝试将数据点提取到.txt或.dat文件中,以便使用GNUPlot查看它们。 以下是文件中存储的数据: yes? show dat '''currently SET data sets: 1> ./CrawfordPoint_surface.nc (default)
yes? show dat
'''currently SET data sets:
1> ./CrawfordPoint_surface.nc (default)
name title I J K L
T_2M Air temperature at 2 m ... ... ... 1:105193
T_2M_O Origin of air temperature data ... ... ... 1:105193
RH_2M Relative humidity at 2 m ... ... ... 1:105193
RH_2M_O Origin of relative humidity dat ... ... ... 1:105193
WS_10M Wind speed at 10 m ... ... ... 1:105193
WS_10M_O Origin of wind speed data ... ... ... 1:105193
P Snowfall rate ... ... ... 1:105193
P_O Origin of snowfall rate ... ... ... 1:105193
SRIN Downward shortwave radiation ... ... ... 1:105193
SRIN_O Origin of downward shortwave ra ... ... ... 1:105193
SROUT Upward shortwave radiation ... ... ... 1:105193
SROUT_O Origin of the upward shortwave ... ... ... 1:105193
LRIN Downward longwave radiation ... ... ... 1:105193
LROUT Upward longwave radiation ... ... ... 1:105193
SHF Sensible heat flux ... ... ... 1:105193
LHF Latent heat flux ... ... ... 1:105193
G Subsurface heat flux ... ... ... 1:105193
TS Surface temperature ... ... ... 1:105193
MELT Melt rate ... ... ... 1:105193
我可以通过让Ferret列出数据集来单独查看数据集:
yes? list TS
VARIABLE : Surface temperature (K)
FILENAME : CrawfordPoint_surface.nc
SUBSET : 105193 points (TIME)
01-JUN-1998 00:00:00 / 1: 265.2
01-JUN-1998 01:00:00 / 2: 264.4
01-JUN-1998 01:59:59 / 3: 263.7
01-JUN-1998 03:00:00 / 4: 263.1
...
这些文件中的每一个都有几年的时间数据,我希望能够在一年内查看(比如:表面温度),而不是让雪貂绘制所有这些数据(yes?plot TS
)。建议我尝试使用gnuplot的原因。但是,它无法直接读取这些文件(netCDF)
向大家问好,请帮助。如果您能将这种格式的数据保存到文本文件中,那么您的工作就快完成了。 尽管如此,日期格式1998年6月1日有点特殊。但我想,由于gnuplot5.0.3,它可以作为输入读取。检查
帮助时间\u说明符
。
即使您的数据中有所有年份,您也只需在gnuplot中相应地设置xrange,就可以将其限制在1998年。默认情况下,列分隔符是空白,因此数据值位于第5列
数据:数据.dat
VARIABLE : Surface temperature (K)
FILENAME : CrawfordPoint_surface.nc
SUBSET : 105193 points (TIME)
01-JUN-1998 00:00:00 / 1: 265.2
01-JUN-1998 01:00:00 / 2: 264.4
01-JUN-1998 01:59:59 / 3: 263.7
01-JUN-1998 03:00:00 / 4: 263.1
03-JUN-1998 00:00:00 / 4: 260.0
代码:
### print time data with abbreviated month
reset session
myTimeFmt = "%d-%b-%Y %H:%M:%S"
set format x "%d-%b" time
set xrange [strptime(myTimeFmt,"01-JUN-1998"):strptime(myTimeFmt,"03-JUN-1998")]
set style line 1 pt 7 lc rgb "red"
plot 'Data.dat' u (timecolumn(1,myTimeFmt)):5 w lp ls 1 ti "Surface temperature (K)"
### end of code
结果:
### print time data with abbreviated month
reset session
myTimeFmt = "%d-%b-%Y %H:%M:%S"
set format x "%d-%b" time
set xrange [strptime(myTimeFmt,"01-JUN-1998"):strptime(myTimeFmt,"03-JUN-1998")]
set style line 1 pt 7 lc rgb "red"
plot 'Data.dat' u (timecolumn(1,myTimeFmt)):5 w lp ls 1 ti "Surface temperature (K)"
### end of code
请发布一段数据片段。嘿,刚刚编辑了问题。我希望现在更清楚了!对不起,这个问题还不清楚。列I、J和K中的点只是占位符?列L具有所有相同的值?我看不到任何日期或年份。这里没有什么阴谋。是否要在一行中绘制所有值?文件似乎有一些非常特殊的内部格式(,)。Gnuplot可以绘制二进制文件(),但需要知道格式、字节偏移量等。在ferret中是否有任何命令可以进行导出,或者我应该列出数据,并将其复制粘贴到.txt或.dat文件中?在我要求ferret在屏幕上显示数据后,我是否只复制并粘贴所有数据?或者如何让FERRET保存netCDF文件的文本文件?我不知道FERRET是否有将数据保存为文件的选项。但是如果你能在屏幕上列出数据,那么你必须把数据复制并保存到一个文件中。是的,这很有意义,只是想确定一下。非常感谢。