
代码绘制成果展示










代码解释


第一部分

# =========================================================================================# ====================================== 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): # 如果该值不是NaNq_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')

推荐


获取方式
