Построение значений x и y с использованием данных из двух отдельных файлов netCDF в R - PullRequest
0 голосов
/ 26 марта 2019

В настоящее время я пытаюсь построить, используя линейный график, данные об осадках (значения по оси Y) с данными кумулятивных выбросов (по оси X), используя R. Оба эти данных находятся в двух отдельных файлах netCDF, которые я я уже прочитал R. В конечном счете, я хотел бы сделать график зависимости осадков от кумулятивных выбросов для выбранного местоположения (как показано ниже в следующем коде). До сих пор я использовал следующий код (с # для выделения каждого шага):

library(raster)
library(ncdf4)
library(maps)
library(maptools)
library(rasterVis)
library(ggplot2)
library(rgdal)
library(sp)

#Geting cumulative emissions data for x-axis

ncfname <- "cumulative_emissions_1pctCO2.nc"
Model1 <- nc_open(ncfname)
print(Model1)
get <- ncvar_get(Model1, "cum_co2_emi-CanESM2") #units of terratones ofcarbon (TtC) for x-axis
print(get)
Year <- ncvar_get(Model1, "time") #140 years


#Getting Model data for extreme precipitation (units of millimeters/day)for y-axis

ncfname1 <- "MaxPrecCCCMACanESM21pctCO2.nc"
Model2 <- nc_open(ncfname1)
print(Model2)
get1 <- ncvar_get(Model2, "onedaymax") #units of millimeters/day
print(get1)
#Reading in latitude, longitude and time from this file:
latitude <- ncvar_get(Model2, "lat") #64 degrees latitude
longitude <- ncvar_get(Model2, "lon") #128 degrees longitude
Year1 <- ncvar_get(Model2, "Year") #140 years

#Plotting attempt

r_brick <- brick(get, xmn=min(latitude), xmx=max(latitude),  
ymn=min(longitude), ymx=max(longitude), crs=CRS("+proj=longlat +ellps=WGS84  
+datum=WGS84 +no_defs+ towgs84=0,0,0"))
randompointlon <- 30 #selecting a longitude
randompointlat <- -5 #selecting a latitude
Hope <- extract(r_brick, 
SpatialPoints(cbind(randompointlon,randompointlat)),method = 'simple')
df <- data.frame(cumulativeemissions=seq(from = 1, to = 140, by = 1),   
Precipitation=t(Hope))
ggplot(data = df, aes(x = get, y = Precipitation, 
group=1))+geom_line()+ggtitle("One-day maximum precipitation (mm/day)   
for random location for CanESM2 1pctCO2 as a function of cumulative 
emissions")

print (Model1) дает следующее (я читаю в переменной №2, с которой сейчас буду работать):

Файл cumulative_emissions_1pctCO2.nc (NC_FORMAT_NETCDF4):

 14 variables (excluding dimension variables):
    float cum_co2_emi-BNU-ESM[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for BNU-ESM
        units: Tt C
    float cum_co2_emi-CanESM2[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for CanESM2
        units: Tt C
    float cum_co2_emi-CESM1-BGC[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for CESM1-BGC
        units: Tt C
    float cum_co2_emi-HadGEM2-ES[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for HadGEM2-ES
        units: Tt C
    float cum_co2_emi-inmcm4[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for inmcm4
        units: Tt C
    float cum_co2_emi-IPSL-CM5A-LR[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for IPSL-CM5A-LR
        units: Tt C
    float cum_co2_emi-IPSL-CM5A-MR[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for IPSL-CM5A-MR
        units: Tt C
    float cum_co2_emi-IPSL-CM5B-LR[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for IPSL-CM5B-LR
        units: Tt C
    float cum_co2_emi-MIROC-ESM[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for MIROC-ESM
        units: Tt C
    float cum_co2_emi-MPI-ESM-LR[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for MPI-ESM-LR
        units: Tt C
    float cum_co2_emi-MPI-ESM-MR[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for MPI-ESM-MR
        units: Tt C
    float cum_co2_emi-NorESM1-ME[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for NorESM1-ME
        units: Tt C
    float cum_co2_emi-GFDL-ESM2G[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for GFDL-ESM2G
        units: Tt C
    float cum_co2_emi-GFDL-ESM2M[time]   (Contiguous storage)  
        long_name: Cumulative carbon emissions for GFDL-ESM2M
        units: Tt C

 1 dimensions:
    time  Size:140
        units: years since 0-1-1 0:0:0
        long_name: time
        standard_name: time
        calender: noleap

4 global attributes:
    description: Cumulative carbon emissions for the 1pctCO2 scenario from the CMIP5 dataset.
    history: Created Fri Jul 21 14:50:39 2017
    source: CMIP5 archieve

print (Model2) дает следующее:

Файл MaxPrecCCCMACanESM21pctCO2.nc (NC_FORMAT_NETCDF4):

 3 variables (excluding dimension variables):
    double onedaymax[lon,lat,time]   (Contiguous storage)  
        units: mm/day
    double fivedaymax[lon,lat,time]   (Contiguous storage)  
        units: mm/day
    short Year[time]   (Contiguous storage)  

 3 dimensions:
    time  Size:140
    lat  Size:64
        units: degree North
    lon  Size:128
        units: degree East

3 global attributes:
    description: Annual global maximum precipitation from the CanESM2 1pctCO2 scenario
    history: Created Mon Jun  4 11:24:02 2018
    contact: rain1290@aim.com

Итак, в общем, это то, чего я пытаюсь достичь, но я не уверен, что то, что я делаю в функции ggplot, является правильным подходом.

Любая помощь с этим будет принята с благодарностью!

Спасибо

1 Ответ

0 голосов
/ 27 марта 2019

Непонятно, для чего вы на самом деле просите помощи. Если это имеет отношение к получению данных из файлов ncdf, то сосредоточьте внимание на этом. Если речь идет о ggplot, предоставьте несколько простых данных и оставьте все ncdf-файлы. Кроме того, я не знаю, что такое «линейный сюжет» (возможно, вещь ggplot?). Вы имеете в виду точечный график?

Чтобы получить данные в формате ncdf, вы можете сделать:

library(raster)
Model1 <- brick("cumulative_emissions_1pctCO2.nc", var="cum_co2_emi-CanESM2")
Model2 <- brick("MaxPrecCCCMACanESM21pctCO2.nc", var="onedaymax") 
latlon <- cbind(30, -5) 
Hope1 <- extract(Model1, lonlat)
Hope2 <- extract(Model2, lonlat)

А теперь, возможно:

plot(Hope1, Hope2)
...