
代码绘制成果展示










代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport matplotlib.pyplot as pltimport pandas as pdfrom mpl_toolkits.axes_grid1.inset_locator import inset_axesfrom scipy.stats import linregressfrom sklearn.metrics import r2_score

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: 'viridis',}SCHEME_ID = 20 #使用的颜色方案cmap_name = COLOR_SCHEMES.get(SCHEME_ID, 'viridis') #获取配色方案

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_yield_hexbin(x, y):#进行线性回归,获取斜率、截距、相关系数、p值等slope, intercept, r_value, p_value, std_err = linregress(x, y)y_pred_fit = slope * x + intercept #使用计算出的斜率和截距,计算出对应的线性回归预测值r_squared = r2_score(y, y_pred_fit) #计算R2rmse = root_mean_squared_error(y, y_pred_fit) #计算RMSErelative_error_sq = ((y - y_pred_fit) / y) ** 2rrmse = np.sqrt(np.mean(relative_error_sq)) * 100 # 计算RRMSE

第四部分

# 创建画布fig, ax = plt.subplots(figsize=(6, 6), dpi=300)

第五部分

#1:1参考线ax.plot([2, 10], #x[2, 10], #y'k--', #样式linewidth=2.5, #线宽zorder=2) #层#绘制线性拟合线ax.plot(x_line, #xslope * x_line + intercept, #y'r-', #样式linewidth=2.5, #线宽zorder=3) #层

第六部分

ax.set_xlim(1.5, 10.5) #x范围ax.set_ylim(1.5, 10.5) #y范围ticks = [2, 4, 6, 8, 10] #刻度位置ax.set_xticks(ticks) #应用到x轴ax.set_yticks(ticks) #应用到y轴ax.set_xticklabels(ticks, fontweight='bold') #加粗字体ax.set_yticklabels(ticks, fontweight='bold') #加粗字体# x轴标题ax.set_xlabel('UAV upscaled yield (t/ha)', fontsize=20, fontweight='bold')#y轴标题ax.set_ylabel('Predicted Yield (t/ha)', fontsize=20, fontweight='bold')#设置边框for spine in ax.spines.values():spine.set_linewidth(2)

第七部分

#R2图例ax.text(2.3, #x9.4, #yrf'$\mathbf{{R^2 = {r_squared:.2f}}}$', #文本fontsize=14) #大小#RMSEax.text(2.3, 8.6, rf'RMSE = {rmse:.2f}', fontsize=14, fontweight='bold')#RRMSEax.text(2.3, 7.8, rf'RRMSE = {rrmse:.2f}', fontsize=14, fontweight='bold')#子图编号ax.text(5.5, 9.0, '(E)', fontsize=22, fontweight='bold')

第八部分

#内嵌坐标轴,用来放置颜色条cbaxes = inset_axes(ax, #轴width="8%", #宽度height="35%", #高度loc='lower right', #位置borderpad=2.5) #内边距cb.ax.set_title('Count', #标题fontsize=12, #字体大小fontweight='bold', #加粗pad=8) #颜色条标题与颜色条本身之间的间距cb.ax.tick_params(labelsize=10, #标签字体大小width=1.5, #刻度线的粗细length=5, #刻度线的长度direction='in', #朝向color='white', #颜色left=True, # 左侧的刻度线right=True, # 右侧的刻度线labelleft=False, # 左侧的刻度数字标签labelright=True) # 右侧的刻度数字标签plt.setp(cb.ax.get_yticklabels(), fontweight='bold') #加粗cb.outline.set_visible(False) #隐藏边框线

第九部分

# =========================================================================================# ======================================4.执行部分======================================# =========================================================================================if __name__ == '__main__':excel_path = r'data.xlsx' #文件的路径df = pd.read_excel(excel_path) #读取# 调用绘图函数plot_yield_hexbin(x_data, y_data)

如何应用到你自己的数据

1.设置配色方案:
SCHEME_ID = 20 #使用的颜色方案2.设置绘图结果的保存地址:
plt.savefig(fr'plot_result_{SCHEME_ID}.png', dpi=150, format='png', bbox_inches='tight')3.设置原始数据的文件路径:
excel_path = r'simulated_data.xlsx' #文件的路径4.提取x、y轴的数据:
x_data = df['UAV upscaled yield (t/ha)'] #提取数据y_data = df['Predicted Yield (t/ha)'] #提取数据

推荐


获取方式
