如何用Python绘制随epsilon_1、epsilon_2变化的能量增益等高线图?
解决等高线图绘制的维度问题
你的问题核心是一维数组运算得到的E无法满足contour类函数对二维输入的要求,只需将一维的epsilon_1和epsilon_2转换为二维网格,再计算对应的能量增益E即可。以下是修正后的完整代码:
import numpy as np import matplotlib.pyplot as plt # 生成一维数组 epsilon_1 = np.linspace(1, 25, 1000) epsilon_2 = np.linspace(1, 25, 1000) # 将一维数组转换为二维网格(X对应epsilon_1,Y对应epsilon_2) X, Y = np.meshgrid(epsilon_1, epsilon_2) # 计算二维的能量增益E E = 0.5 * (X / Y + 1) # 绘制等高线图 plt.figure(figsize=(8, 6)) # 使用contourf填充颜色,contour绘制等高线 contour_filled = plt.contourf(X, Y, E, cmap='viridis') contour_lines = plt.contour(X, Y, E, colors='black', linewidths=0.5) # 添加标注 plt.clabel(contour_lines, inline=True, fontsize=8) # 标注等高线数值 plt.colorbar(contour_filled) # 显示颜色条 plt.xlabel('$\epsilon_1$') plt.ylabel('$\epsilon_2$') plt.title('能量增益随$\epsilon_1$和$\epsilon_2$变化的等高线图') plt.show()
关键说明:
np.meshgrid会把两个一维数组扩展为二维网格,X的每一行都是epsilon_1的复制,Y的每一列都是epsilon_2的复制,这样X和Y的每个元素组合对应平面上的一个坐标点。- 此时计算
E时,X/Y是逐元素运算,得到的E是和X、Y同维度的二维数组,完全符合plt.contour/plt.contourf的输入要求。 - 如果后续需要处理非结构化的散点数据,再考虑使用
plt.tricontourf,当前场景下结构化网格的contour系列函数更高效。
内容的提问来源于stack exchange,提问作者Ella S
相关产品推荐
相关产品推荐

