Python构建XYZ坐标三维数组及绘图y轴倒置、坐标轴显示异常问题求助
问题原因
- y轴倒置:
matplotlib的imshow函数默认origin='upper',将数组第一行对应图像顶部,和笛卡尔坐标系原点在左下角的规则冲突。 - 坐标轴显示索引而非实际坐标:未给
imshow传入extent参数指定坐标范围,默认使用数组下标作为坐标轴刻度。 - 绘图数据错误:你将包含大数值x/y坐标的
xyz数组直接乘255转uint8,x、y数值远大于1,转换后发生溢出,颜色映射完全不符合z值的实际分布。 - xyz数组构造冗余:手动循环生成xy数组的逻辑效率低,numpy原生方法可直接实现。
修复方案
1. 修正绘图代码
仅需要修改imshow的传参即可解决两个显示问题:
# Create figure and add axis fig = plt.figure(figsize=(6,4)) ax = fig.add_subplot(111) # 传入origin和extent参数,直接使用zi作为颜色映射数据源 img = ax.imshow( zi, origin='lower', # 原点设置在左下角,匹配笛卡尔坐标系 extent=[xi.min(), xi.max(), yi.min(), yi.max()] # 指定实际坐标范围 ) # 增加颜色条对应z值 plt.colorbar(img) plt.show()
2. 更简便的xyz三维数组构造方法
不需要手动嵌套循环生成xy数组,直接用np.stack拼接meshgrid生成的x、y和计算得到的zi即可:
# 一行代码生成shape为(375,625,3)的xyz三维数组 xyz = np.stack([x, y, zi], axis=-1)
内容的提问来源于stack exchange,提问作者Melanie
相关产品推荐
相关产品推荐

