# -*- coding: utf-8 -*-
"""
Created on Wed Jun 28 19:21:54 2023
@author: Administrator
"""
from statistics import mean
import pandas as pd
import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import Normalize
from scipy.stats import gaussian_kde
from matplotlib.font_manager import FontProperties
from sklearn.metrics import explained_variance_score,r2_score,median_absolute_error,mean_squared_error,mean_absolute_error
import math
#------------------------------------------------------------------------
def PearsonFirst(X,Y):
XY = X*Y
EX = X.mean()
EY = Y.mean()
EX2 = (X**2).mean()
EY2 = (Y**2).mean()
EXY = XY.mean()
numerator = EXY - EX*EY # 分子
denominator = math.sqrt(EX2-EX**2)*math.sqrt(EY2-EY**2) # 分母
if denominator == 0:
return 'NaN'
rhoXY = numerator/denominator
return rhoXY
#------------------------------------------------------------------------
#------------------------------------------------------------------------
fig = plt.figure(figsize=(8,6),dpi=300)
ax1 = fig.add_subplot(1,1,1)
ds = pd.read_csv(r'')
x = ds['smap'].values.ravel()
y = ds['cygnss'].values.ravel()
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
# z = pd.read_csv(r'').values.ravel()
# In[]
#----------------------------------------------------------------------------------
x2 = np.linspace(0,1)
y2 = x2
def f_1(x,A,B):
return A*x + B
A1,B1 = optimize.curve_fit(f_1,x,y)[0]
y3 = A1*x + B1
bias = mean(x - y)
MAE = mean_absolute_error(x,y)
MSE = mean_squared_error(x, y)
RMSE = np.power(MSE, 0.5)
r = PearsonFirst(x,y)
#--------------------------------------------------------------------------------
ax1.plot(x2,y2,color='k',linewidth=1.5,linestyle='--')
# ax1.plot(x,y3,color='r',linewidth=2,linestyle='-')
scatter=ax1.scatter(x,y,marker='o',c=z/10,edgecolors='none',s=15,cmap='Spectral_r')
ax1.set_xlabel('SMAP 土壤湿度(cm$^{3}$·cm$^{-3}$) \n(d) 方案4')
ax1.set_ylabel('土壤湿度预测值(cm$^{3}$·cm$^{-3}$)')
ax1.grid(True)
ax1.grid(alpha=.6)
ax1.set_xlim((0,1))
ax1.set_ylim((0,1))
ax1.set_xticks(np.arange(0,1,step=0.1))
ax1.set_yticks(np.arange(0,1,step=0.1))
ax1.set_xticklabels(np.arange(0,1,step=0.1).astype('float32'),family='TIMES NEW ROMAN')
ax1.set_yticklabels(np.arange(0,1,step=0.1).astype('float32'),family='TIMES NEW ROMAN')
ax1.text(0.1,0.90,'RMSE = %.4f' % RMSE + '(cm$^{3}$·cm$^{-3}$)', family = 'Times New Roman',alpha=1)
ax1.text(0.1,0.82,'MAE = %.4f' % MAE + '(cm$^{3}$·cm$^{-3}$)', family = 'Times New Roman',alpha=1)
ax1.text(0.1,0.74,'R = %.4f' % r, family = 'Times New Roman',alpha=1)
cbar = fig.colorbar(scatter, ax
[ax1],shrink=1,orientation='vertical',extend='both',pad=0.009,aspect=30)
# cbar.set_ticklabels(['1','2','3','4','5'],family='TIMES NEW ROMAN')
cbar.ax.locator_params(nbins=8)
Python散点密度图
于 2024-01-23 16:26:14 首次发布