python 绘制netcdf:x轴=一年中的日期,y轴=每年的参数

laik7k3q  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(108)

我有一个包含2017-2023年的netcdf file。我需要将每个数据集按年分组,并为每个变量绘制每个月的图。结构如下所示enter image description here
我的代码看起来像这样

%matplotlib inline

import numpy as np
import xarray as xr
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt

ds_smap  = xr.open_dataset('SPL4SMGP.006_9km_aid0001.nc')

#Select Location Alice Springs Mulga
location = ds_smap.sel(lat = -22.2828,lon = 133.2493, day_period = 1, method='nearest')

dataframe = location.groupby(ds_smap["time"].dt.dayofyear).min().drop(["lat", "lon"]).to_dataframe()
dataframe["max"] = location.groupby(ds_smap["time"].dt.dayofyear).max().values

for year, yearloc in location.groupby(location["time"].dt.year):
    dataframe[year] = pd.Series(index=yearloc["time"].dt.dayofyear, data=yearloc.values)
    dataframe['Geophysical_Data_sm_rootzone'].plot()

字符串
这给了我这个x1c 0d1x
我期待的是2017-2023年的多年情节。有什么建议吗谢谢你!

5hcedyr0

5hcedyr01#

很抱歉我不能在Pandas的数据框的操作框架中提供答案,但它非常简单...
x1c 0d1x的数据
普通的东西

import datetime as dt
import matplotlib.pyplot as plt
import numpy as np

字符串
我没有你的数据,所以让我们生产它

day_1 = dt.datetime(year=2017, month=7, day=1, hour=12,)
d = dt.timedelta(days=1)
n_days = 365*5+1+4*30+12
days = np.array([day_1+d*n for n in range(n_days)])
data = np.linspace(0, 1, n_days)


现在,将数据放入recarray中,这就是xarray.open_dataset返回的数据(如果我没有弄错的话)。

net = np.core.records.fromarrays((days, data), titles=('dt', 'G'))


当我有recarray时,我们操纵它的列来绘制一些东西。
让我们开始计算一个包含no的数组。一年中的某一天,Jan 1 → 1,Dec 31 → 365(感谢this answer,请随时支持它);这个数组将是我们的 x

days_of_yr = np.array([date.timetuple().tm_yday for date in net.dt])


接下来,计算每个日期对应的年份的向量,这个向量将用于分组

yrs = np.array([date.year for date in net.dt])


现在我们准备好密谋了

for y in set(yrs):
    ix = (yrs==y)
    plt.plot(days_of_yr[ix], net.G[ix], label=str(y))

plt.legend()
plt.xticks(np.linspace(0, 366, 13),
    'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec Jan'.split())

plt.show()


xticks技巧来自this answer,请随意支持它

相关问题