问题描述
我正在尝试使用 seaborn 模块和 linesplot 函数创建时间序列。对于绘图,我从两个 netCDF4 文件中提取了变量作为 3D 掩码数组。我提取的变量称为 fgco2。我已经找到了每个数据集的年度平均值并添加到了熊猫数据框。
我的目标是将这些绘制为带有两组数据的误差带的线图,但我的代码第 58 行收到以下错误消息:
hindcast= sns.load_dataset(df_melt)
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().
我认为此错误是由于数据集中包含 NaN 值的掩码数组造成的,但我不确定。任何有关如何解决此问题的建议将不胜感激。完整代码如下:
import numpy as np
import matplotlib.pyplot as plt
from netCDF4 import Dataset
import pandas as pd
#extracting values for observations
filename = 'C:/Users/efnel/Historical data analysis/fgco2_obs_ymean.nc'
ds_co2obs = Dataset(filename)
fgco2_obs_var = ds_co2obs.variables['fgco2'][:]
#fixing units to be Pg C yr-1 from mol/m2/yr
fgco2_obs_PG = ((fgco2_obs_var* 44.01) * 49306000) / 10**9
#finding global average of carbon flux
global_average= np.mean(fgco2_obs_PG[:,:,:],axis=(1,2))
annual_fgco2 = np.reshape(global_average,(33))
#Finding anomalies to the mean,positive values show weakening and negative show strengthening.
av=np.mean(annual_fgco2[0:33])
obs_anom = annual_fgco2 - av
#extracting data from model
filename_2 = 'C:/Users/efnel/Historical data analysis/fgco2_hist_ymean.nc'
ds_co2mod = Dataset(filename_2)
fgco2_mod_var = ds_co2mod.variables['fgco2'][:]
#changing units form kg/m2/s to Pg/yr
fgco2_mod_inv = ((fgco2_mod_var * -1 * 31557600) * 1000 * 49306000)/ 10**9
#49306000 is m2 area of 16 and 17 biomes combined,taken from Mckinley 2016
#finding global average carbon flux in southern ocean below polar front
global_average_mod= np.mean(fgco2_mod_inv[:,2))
annual_fgco2_mod = np.reshape(global_average_mod,(33))
#finding anomalies from the mean for model hindcast
av_2=np.mean(annual_fgco2_mod[0:33])
mod_anom = annual_fgco2_mod - av_2
#setting year range for plot
x = np.arange(1982,2015,1)
#transforming numpy arrays into dataframe
df = pd.DataFrame(x,columns=['Year'])
df['Observed Anomalies'] = np.ma.filled(obs_anom)
df['Model Anomalies'] = np.ma.filled(mod_anom)
print(df) #used to check significant figures of data
df_melt = pd.melt(df,id_vars=['Year'],value_vars=['Observed Anomalies','Model Anomalies'])
#Import additional working libraries
import seaborn as sns
# Linear correlation plot
sns.set_theme(style="darkgrid")
hindcast= sns.load_dataset(df_melt)
sns.lineplot(x="Year",y="value",hue="variable",data=hindcast)
plt.savefig('fgco2_hindcast_anom.png')
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)