如何为Matplotlib的contourf填充等高线图设置任意横纵比例
你当前代码没有生效的核心原因有两个:
plt.figure(figsize=(8,2))调用顺序错误:必须在绘图命令前创建指定尺寸的画布,你先执行contourf再新建画布,相当于绘图内容落到了默认画布上,新建的8:2画布没有任何绘图内容。- 如果你要独立于画布尺寸固定contourf的横纵比例,需要直接调整坐标轴的纵横比参数,而非仅调整画布大小。
方案1:修正画布设置顺序即可生效
import matplotlib.pyplot as plt from matplotlib import cm import numpy as np import pandas as pd import math rm = pd.read_excel("test_3d.xlsx", header = None) # 计算噪声最小值 rec = np.shape(rm) # 生成网格 X = np.arange(1,rec[1]+1,1) Y = np.arange(1,rec[0]+1,1) x , y = np.meshgrid(X,Y) # 绘图:先创建指定尺寸画布 plt.clf() plt.figure(figsize=(8,2)) # 移到contourf绘图命令之前 con = plt.contourf(x,y,rm, cmap=cm.jet) plt.tight_layout() plt.title('2457MHz') plt.show()
方案2:直接固定坐标轴横纵比(不受画布大小影响)
如果需要不管画布尺寸怎么调整,contourf的横纵轴显示比例都固定,用ax.set_aspect方法直接作用于绘图坐标轴:
# 其余前置代码和上面一致 plt.clf() fig, ax = plt.subplots(figsize=(8,2)) con = ax.contourf(x,y,rm, cmap=cm.jet) # 手动设置横纵比例:数值为 纵轴单位长度/横轴单位长度 的比值 # 比如希望横轴1单位对应纵轴0.25单位(横轴宽度是纵轴的4倍)就填0.25,按需调整数值即可 ax.set_aspect(0.25) plt.tight_layout() plt.title('2457MHz') plt.show()
内容的提问来源于stack exchange,提问作者Denny
相关产品推荐
相关产品推荐

