Построение графиков значений x и y с использованием данных из двух отдельных файлов NetCDF в R

#r #plot #ncdf4

#r #построение графика #ncdf4

Вопрос:

В настоящее время я пытаюсь построить, используя линейный график, данные об осадках (значения по оси 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")
  

печать (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
  

печать (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. Не могли бы вы уточнить, какой именно результат вы ищете, и почему ggplot вызов у вас не работает? Кроме того, ваш код трудно читать; пожалуйста, убедитесь, что все комментарии действительно закомментированы (и было бы полезно расставить пробелы вокруг таких операторов, как <- и = ).

2. Привет, С. Браун, спасибо за ваш ответ! Я просто добавил операторы с интервалом вокруг. Моя цель — использовать ggplot (или, возможно, лучшую команду построения графика, о которой я не знаю) для отображения осадков (ось y) как функции совокупных выбросов (ось x). В конечном итоге я хотел бы посмотреть, существует ли связь между осадками и увеличением совокупных выбросов.

3. @C.Braun Кроме того, просто для ясности, я специально пытаюсь построить линейный график, чтобы показать взаимосвязь между осадками и совокупными выбросами (итак, осадки как функция совокупных выбросов — я только что добавил эту правку в свою первоначальную публикацию).

Ответ №1:

Непонятно, о чем вы на самом деле просите помощи. Если это связано с получением данных из файлов 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)
  

Комментарии:

1. Привет, Роберт, спасибо за твой ответ. Прошу прощения за то, что не выразился яснее — я думаю, что лучший способ описать тип графика, который я пытаюсь создать для конкретного местоположения, — это «линейный график», подобный тому, что вы могли бы увидеть во временном ряду. Цель состоит в том, чтобы отобразить (используя линейный график) осадки как функцию совокупных выбросов для, в данном случае, -5 градусов широты и 30 градусов долготы. Имеет ли это смысл? Кроме того, «Model1» не выполняется, я думаю, потому что этот файл одномерный, и я думаю, что это влияет на Hope1. Model2 работает просто отлично! Может ли это быть причиной?

2. Да, если Model1 является одномерным, это так работать не будет. Если ваш вопрос касается графика, приведите несколько примеров данных x=c(1,2,3) и y=c(4,3,6) и возьмите их оттуда.

3. Привет, Роберт, Да, вопрос относится к построению графика (создание линейного графика с использованием указанных выше двух переменных). Данные, которые я хотел бы отобразить на оси x, будут получены из переменной «cum_Co2_emi-CanESM2» (140 значений, с минимальным значением 0 Ttc и максимальным 2,8 Ttc), в то время как данные для оси y будут получены из переменной «onedaymax» (которая содержит данные об осадках за 140 лет / слоев, с минимальным значением 0,03 мм / день и максимальным значением 410,18 мм / день).

4. На самом деле, просто чтобы добавить к моему приведенному выше ответу, минимум и максимум, указанные для «onedaymax», являются глобальными только для первого года. Я хочу, чтобы эти 140 значений / год были конкретно для широты -5 градусов и долготы 30 градусов как функция совокупных выбросов (минимальный и максимальный значения, указанные выше для этого, подходят — т. Е. минимум 0,00 TtC и максимум 2,80 TtC).

5. Привет, Роберт, я просто хотел сообщить тебе, что это сработало, и я смог преобразовать тип графика в линейный график. 🙂 Кроме того, я не уверен, следует ли мне создавать новую тему для этого, но я пытаюсь построить другую линию (с другим цветом) на том же графике таким же образом. Однако, поскольку новый фрейм данных о совокупных выбросах, который я использую, содержит другое количество значений (он имеет 95 значений), чем исходный фрейм данных о совокупных выбросах (который имеет 140 значений), он выдает ошибки при попытке «lines (get2.teratons,Model4, type =»o»,col =»blue»)». Диапазон значений x и y совпадает для обоих.