如何使用Matplotlib让等高线图在二维颜色网格图上居中
解决10×10数组颜色网格与等高线对齐问题
问题根源在于Matplotlib中pcolormesh和contour的坐标默认逻辑不同:
pcolormesh将10×10的数组值对应到10×10个网格单元格,单元格边缘坐标范围默认是0到10(假设单元大小为1)。contour默认将10×10的数组值对应到10×10个网格节点,节点坐标是0到9,导致等高线整体偏移半个单元格到左下角。
不用扩容数组的解决方法是给等高线的坐标加上半个网格单元的偏移,让等高线节点对应到颜色网格单元格的中心:
import numpy as np import matplotlib.pyplot as plt # 生成两个10×10的示例数组 z_color = np.random.rand(10, 10) z_contour = np.random.rand(10, 10) # 绘制颜色网格 plt.pcolormesh(z_color, cmap='viridis') # 生成等高线的中心坐标(偏移0.5个单元) x_centers = np.arange(10) + 0.5 y_centers = np.arange(10) + 0.5 # 绘制居中的等高线 plt.contour(x_centers, y_centers, z_contour, colors='white', linewidths=1) plt.colorbar() plt.show()
如果你的网格单元大小不是1,只需把偏移值改成单元大小的一半即可。比如单元大小为2时,偏移值设为1。
内容的提问来源于stack exchange,提问作者Bas R
相关产品推荐
相关产品推荐

