当前位置:首页>python>期刊图片复现|Python绘制六边形分箱散点回归拟合图

期刊图片复现|Python绘制六边形分箱散点回归拟合图

  • 2026-09-02 20:14:31
期刊图片复现|Python绘制六边形分箱散点回归拟合图

代码绘制成果展示

论文:Improved prediction of winter wheat yield at regional scale with limited  ground samples by unmanned aerial vehicle and satellite synergy
论文原图
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 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)  #计算R2    rmse = root_mean_squared_error(y, y_pred_fit)  #计算RMSE    relative_error_sq = ((y - y_pred_fit) / y) ** 2    rrmse = np.sqrt(np.mean(relative_error_sq)) * 100 # 计算RRMSE

第四部分

绘图函数:创建画布
    # 创建画布    fig, ax = plt.subplots(figsize=(6, 6), dpi=300)

第五部分

绘图函数:绘制1:1参考线与拟合线
    #1:1参考线    ax.plot([2, 10],  #x            [2, 10],  #y            'k--',  #样式            linewidth=2.5,  #线宽            zorder=2)  #层    #绘制线性拟合线    ax.plot(x_line,  #x            slope * 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,  #x            9.4,  #y            rf'$\mathbf{{R^2 = {r_squared:.2f}}}$',  #文本            fontsize=14)  #大小    #RMSE    ax.text(2.3, 8.6, rf'RMSE = {rmse:.2f}', fontsize=14, fontweight='bold')    #RRMSE    ax.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)'] #提取数据

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章