
代码绘制成果展示













代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib.colors as mcolors

第二部分

# =========================================================================================# ====================================== 2. 颜色库 =======================================# =========================================================================================COLOR_SCHEMES = {1: 'coolwarm'}

第三部分

# =========================================================================================# ====================================== 3.绘图函数 ==================================# =========================================================================================def plot_advanced_3d_heatmap(df_data, scheme_id):counts_matrix = df_data.values # 提取数据n_rows, n_cols = counts_matrix.shape # 获取行数和列数fig, ax = plt.subplots(figsize=(9.0, 5.0))ax.set_aspect('equal') #坐标轴长宽比例ax.set_facecolor('#e6e6e6') #背景色

第四部分

#遍历绘制垂直方向的网格线for x in range(1, n_cols):ax.axvline(x, #轴color='white', #颜色linewidth=1.5, #线宽zorder=0) #层#y轴标题ax.set_ylabel('Regions', #文本fontsize=15, #字体大小labelpad=10) #间距#x轴标题ax.set_xlabel('Time', #文本fontsize=15, #字体大小labelpad=10) #间距

第五部分

# 3D柱状图在x、y方向的宽度pad_x = (1.0 - bar_width_x) / 2.0 #单元格y方向的内边距,以便柱体居中对齐pad_y = (1.0 - bar_width_y) / 2.0 #单元格y方向的内边距,以便柱体居中对齐#遍历排序后单元格for i, j in cells:count = counts_matrix[j, i] #获取当前行列数值if count == 0:h = h_val * hscale # 乘以高度缩放系数计算出最终图形高度base_x = i + pad_x #当前3D柱体左下角xbase_y = j + pad_y #当前3D柱体左下角y#添加到图上ax.add_patch(QM)ax.add_patch(top) #添加到图上

第六部分

x_ticks_pos = np.arange(n_cols) + 0.5 #X轴刻度位置ax.set_xticks(x_ticks_pos) #设置刻度#x轴刻度标注ax.set_xticklabels(df_data.columns, #文本rotation=90, #旋转va='top', #垂ax.set_xlim(0, n_cols)ax.set_ylim(0, n_rows)ax.tick_params(axis='x', #轴which='major', #主刻度length=5, #长width=1.5, #粗细color='#111111') #颜色#y轴刻度设置ax.tick_params(axis='y', #轴which='major', #主刻度length=5, #长width=1.5, #粗细color='#111111') #颜色plt.subplots_adjust(right=0.88, bottom=0.2) #调整布局

第七部分

#颜色条轴cax = inset_axes(ax, #坐标轴width="2%", #宽度比例height="55%", #高度比例loc='lower left', #位置bbox_to_anchor=(1.05, 0.15, 1, 1), #坐标cbar.ax.set_title('LST', #文本pad=12, #间距fontsize=14, #字体大小fontweight='bold', #加粗loc='left') #左对齐

第八部分

# =========================================================================================# ======================================4 . 执行部分===================================# =========================================================================================if __name__ == '__main__':df_real = pd.read_excel(r'data.xlsx')#读取数据df_plot = df_real.set_index('Region') #将Region列设置为索引else:scheme_id = 1selected_cmap = COLOR_SCHEMES[scheme_id]print('正在绘制并保存方案:', scheme_id)plot_advanced_3d_heatmap(df_plot, scheme_id)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
df_real = pd.read_excel(r'data.xlsx')#读取数据2.设置y轴的刻度标注数据,执行部分:
df_plot = df_real.set_index('Region') #将Region列设置为索引3.设置是否要进行批量绘图,执行部分:
plot_all =True #是否批量绘图4.设置绘图结果的保存地址,绘图函数部分:
plt.savefig( fr'3d_heatmap_{scheme_id}.png', dpi=300, bbox_inches='tight')
推荐


获取方式
