当前位置:首页>python>Python绘制地理探测器交互作用气泡图

Python绘制地理探测器交互作用气泡图

  • 2026-10-11 06:12:18
Python绘制地理探测器交互作用气泡图

代码绘制成果展示

公众号所有的免费代码将于1208号全部下架,需要的请尽快领取,具体获取方式请查看1202的文章,过时不补。
多种配色方案
多种形状组合方案

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import matplotlib.pyplot as pltimport numpy as npimport matplotlib.colors as mcolorsplt.rcParams['font.family'] = 'serif'plt.rcParams['font.serif'] = 'Times New Roman'import matplotlibmatplotlib.rcParams['pdf.fonttype'] = 42matplotlib.rcParams['ps.fonttype'] = 42

第二部分

颜色库的设置
# =========================================================================================# ====================================== 2. 颜色库设置 ==========================# =========================================================================================COLOR_SCHEMES  = {    1: ["#fde0dd", "#fcc5c0", "#fa9fb5", "#f768a1", "#dd3497", "#ae017e", "#7a0177", "#49006a"],}

第三部分

库的形状标记库的设置以及颜色方案、形状标记方案的选择
# =========================================================================================# ====================================== 3. 形状标记库设置 ==========================# =========================================================================================SHAPE_SCHEMES = {    1: {'bubble': 'o', 'high': '↑↑', 'mid': '↑'},}selected_color_id = 1  # 设置当前选用的颜色selected_shape_id = 1  # 设置当前选用的形状

第四部分

绘图数据的准备,需要手动输入设置
# =========================================================================================# ====================================== 4. 数据准备=========================================# =========================================================================================q_interaction_matrix = np.full((11, 11), np.nan)  # 创建一个空数组,初始值全部为NaN# 定义交互作用数据,值是对应的q值interaction_data = {    (1, 0): 0.46,    (2, 0): 0.47, (2, 1): 0.28,    (3, 0): 0.42, (3, 1): 0.30, (3, 2): 0.25,    (4, 0): 0.29, (4, 1): 0.37, (4, 2): 0.41, (4, 3): 0.37,    (5, 0): 0.30, (5, 1): 0.35, (5, 2): 0.38, (5, 3): 0.37, (5, 4): 0.24,    (6, 0): 0.36, (6, 1): 0.37, (6, 2): 0.37, (6, 3): 0.35, (6, 4): 0.28, (6, 5): 0.33,    (7, 0): 0.35, (7, 1): 0.32, (7, 2): 0.35, (7, 3): 0.35, (7, 4): 0.19, (7, 5): 0.28, (7, 6): 0.34,    (8, 0): 0.24, (8, 1): 0.40, (8, 2): 0.42, (8, 3): 0.37, (8, 4): 0.24, (8, 5): 0.30, (8, 6): 0.35, (8, 7): 0.32,    (9, 0): 0.20, (9, 1): 0.20, (9, 2): 0.23, (9, 3): 0.22, (9, 4): 0.06, (9, 5): 0.18, (9, 6): 0.25, (9, 7): 0.18,(9, 8): 0.18,    (10, 0): 0.24, (10, 1): 0.28, (10, 2): 0.29, (10, 3): 0.27, (10, 4): 0.16, (10, 5): 0.24, (10, 6): 0.26,(10, 7): 0.25, (10, 8): 0.21, (10, 9): 0.13,}#定义单因子的q值,用于绘制对角线上的气泡q_individual_factors = np.array([0.20, 0.15, 0.25, 0.10, 0.30, 0.12, 0.22, 0.18, 0.28, 0.13, 0.27])# 定义X轴和Y轴的标签文本labels = ['Tmp', 'Pre', 'Win', 'Hum', 'Dem', 'Slp', 'Asp', 'Veg', 'Pop', 'Roa', 'Riv']

第五部分

绘图函数初始化,包括创建画布、配置颜色映射等
# =========================================================================================# ====================================== 5. 绘图函数=========================================# =========================================================================================def plot_interaction_chart(q_matrix, q_factors, label_list, color_id=1, shape_id=1):    selected_colors = COLOR_SCHEMES .get(color_id, COLOR_SCHEMES [1])  #获取颜色方案    selected_shapes = SHAPE_SCHEMES.get(shape_id, SHAPE_SCHEMES[1])  #形状方案    bubble_marker = selected_shapes['bubble']  #提取形状标记    mark_high = selected_shapes['high']  #双因子增强符号    mark_mid = selected_shapes['mid']  #非线性增强符号    #获取因子的数量    n = len(label_list)    fig, ax = plt.subplots(figsize=(10, 9))  #创建画布和坐标轴    norm = mcolors.Normalize(vmin=vmin, vmax=vmax)  #创建归一化对象    for i in range(n):  # 遍历行        for j in range(n):  # 遍历列            cell_center_x = j + 0.5  #单元格中心的X坐标            cell_center_y = i + 0.5  #单元格中心的Y坐标

第六部分

绘制左下角的数值标注以及影响类别的标记,影响类别的判断
# 左下角区域            if i > j:  #判断是否在矩阵的下三角区域                q_interaction = q_matrix[i, j]  # 获取对应的交互作用值                if not np.isnan(q_interaction):  # 如果该值不是NaN                    q_factor_i = q_factors[i]  # 获取行因子的单因子q值                    q_factor_j = q_factors[j]  # 获取列因子的单因子q值                    number_color = cmap(norm(q_interaction))  #根据数值获取对应的颜色用于文字显示                    ax.text(cell_center_x,  #X坐标                            cell_center_y,  #Y坐标                            f'{q_interaction:.2f}',  #数值                            ha='center',  #水平居中                            va='center',  #垂直居中                            fontsize=14,  #字体大小                            fontweight='bold',  #字体粗细                            color=number_color,  #文本颜色                            zorder=3)  #图层顺序                    if arrow_text:  #如果存在需要绘制的标记文本                        arrow_y_position = cell_center_y + 0.22 #Y坐标(                        ax.text(cell_center_x,  #X坐标                                arrow_y_position,  #Y坐标                                arrow_text,  #标记符号                                ha='center',  #水平                                va='top',  #垂直                                fontsize=14,  #字体大小                                color='black',  #颜色                                weight='bold',  #字体粗细                                zorder=4)  #图层顺序

第七部分

绘制右上角的形状标记部分以及对角线的形状标记部分
                    ax.scatter(cell_center_x,  #X坐标                               cell_center_y,  #Y坐标                               s=bubble_size,  #散点大小                               c=q_interaction_for_bubble,  #颜色值                               cmap=cmap,  # 应用颜色映射                               norm=norm,  # 应用归一化                               marker=bubble_marker,  #散点形状                               alpha=0.85,  #透明度                               edgecolors='none',  # 不显示边缘颜色                               zorder=2)  #图层顺序            # 对角线区域            elif i == j:  #判断是否在对角线上                    ax.scatter(cell_center_x,  #X坐标                               cell_center_y,  #Y坐标                               s=bubble_size,  #散点大小                               c=q_single,  #颜色值                               cmap=cmap,  #应用颜色映射                               norm=norm,  #应用归一化                               marker=bubble_marker,  #散点形状                               alpha=0.85,  #透明度                               edgecolors='none',  #不显示边缘颜色                               zorder=2)  #图层顺序

第八部分

图面的细节调整包括坐标轴、刻度线、网格线、标注字体等
    tick_label_positions = np.arange(n) + 0.5  #刻度标签的位置    ax.set_xticks(tick_label_positions)  #设置X轴刻度位置    ax.set_xticklabels(label_list,  #X轴刻度标签文本                       fontsize=14,  #字体大小                       fontweight='bold')  #字体粗细    ax.set_yticks(tick_label_positions)  #设置Y轴刻度位置    ax.set_yticklabels(label_list,  #Y轴刻度标签文本                       fontsize=14,  #字体大小                       fontweight='bold')  #字体粗细    ax.xaxis.tick_top()  # 将X轴刻度移动到顶部    ax.xaxis.set_label_position('top')  # 将X轴标签位置设置在顶部    ax.grid(False)  # 关闭默认网    ax.set_xlim(0, n)  #X轴范围    ax.set_ylim(n, 0)  #Y轴范围    ax.set_aspect('equal', adjustable='box')  #设置纵横比相等    ax.tick_params(axis='both', which='both', length=0)  #去掉刻度线    #去掉边框    ax.spines['top'].set_visible(False)    ax.spines['bottom'].set_visible(False)    ax.spines['left'].set_visible(False)    ax.spines['right'].set_visible(False)

第九部分

颜色条绘制,图表标题的设置,绘图结果的保存等
    cbar = fig.colorbar(sm,                        ax=ax,  #在当前axes上添加颜色条                        shrink=1,  #缩放比例                        aspect=30,  # 长宽比                        pad=0.01,  #间距                        orientation='vertical')  #方向    cbar.set_label('q-statistic Value',  #颜色条标题                   rotation=270,  #角度度                   labelpad=20,  #间距                   fontsize=14,  #字体大小                   fontweight='bold',  #字体粗细                   )  # 设置字体族    cbar.ax.tick_params(labelsize=14,  #刻度标签大小                        length=3,  #刻度线长度                        width=2,  #刻度线宽度                        colors='black')  #颜色    #设置图表标题    ax.set_title('Factor Interaction and Enhancement Analysis',                 fontsize=16,                 pad=25,                 fontweight='bold'                 )    fig.tight_layout(rect=[0, 0.02, 1, 0.95])  # 调整布局

第十部分

绘图函数调用
# =========================================================================================# ====================================== 6.调用绘图函数=========================================# =========================================================================================plot_interaction_chart(    q_interaction_matrix,  #交互作用矩阵    q_individual_factors,  #单因子数组    labels,  #标签列表    color_id=selected_color_id,  #颜色    shape_id=selected_shape_id,  #形状)

如何应用?

1.选择你想要使用到的配色方案:

selected_color_id = 14 # 设置当前选用的颜色

2.选择你想要使用到的形状标记方案:

selected_shape_id = 20 # 设置当前选用的形状

3.手动输入绘图数据所使用的交互做用q值:

interaction_data = {    (1, 0): 0.46,}

4.手动输入对角线q值:

q_individual_factors = np.array([0.20, 0.15, 0.25, 0.10, 0.30, 0.12, 0.22, 0.18, 0.28, 0.13, 0.27])

5.手动输入特征:

labels = ['Tmp', 'Pre', 'Win', 'Hum', 'Dem', 'Slp', 'Asp', 'Veg', 'Pop', 'Roa', 'Riv']

6.定义绘图结果的保存地址:

plt.savefig(fr"chart_{selected_color_id}_{selected_shape_id}.png", dpi=300, bbox_inches='tight')plt.savefig(fr"chart_{selected_color_id}_{selected_shape_id}..pdf", format='pdf', bbox_inches='tight')

推荐

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

获取方式

需要的请后台私信我获取详细信息,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章