You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中保持图形不变,修改坐标轴刻度与坐标系?

Matplotlib热力图坐标轴调整方案

核心思路

不用替换plt.matshow,直接在其生成的轴对象上修改刻度映射,同时调整坐标系方向(因为matshow默认Y轴从上到下递增,和地理坐标系逻辑相反)。

方法一:直接修改matshow的轴刻度

你的数据集是100×100的二维数组,X轴索引0-99对应实际经度13-14,Y轴索引0-99对应实际纬度14.5-15.5,代码修改如下:

import matplotlib.pyplot as plt

# 绘制热力图并获取轴对象
ax = plt.matshow(dataslice, interpolation="nearest")
plt.colorbar()

# 自定义刻度数量,可根据需求调整
num_ticks = 5

# 设置X轴刻度:将原索引映射为实际经度
x_ticks = plt.linspace(0, 99, num_ticks)
x_labels = plt.linspace(13, 14, num_ticks)
ax.axes.set_xticks(x_ticks)
ax.axes.set_xticklabels([f"{x:.2f}" for x in x_labels])

# 设置Y轴刻度:将原索引映射为实际纬度,同时翻转Y轴匹配地理坐标系
y_ticks = plt.linspace(0, 99, num_ticks)
y_labels = plt.linspace(14.5, 15.5, num_ticks)
ax.axes.set_yticks(y_ticks)
ax.axes.set_yticklabels([f"{y:.2f}" for y in y_labels])
ax.axes.invert_yaxis()

plt.xlabel("Longitude")
plt.ylabel("Latitude")
plt.savefig(f"{file_name}_Data.png")
plt.show()

方法二:用imshow配合extent参数(替代matshow)

如果想用fig, ax = plt.subplots(),可以用imshow并通过extent直接指定实际坐标范围,更直观:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
# extent参数格式:[xmin, xmax, ymin, ymax]
im = ax.imshow(dataslice, interpolation="nearest", extent=[13, 14, 14.5, 15.5])
plt.colorbar(im)

# 翻转Y轴,让纬度从下到上递增
ax.invert_yaxis()

ax.set_xlabel("Longitude")
ax.set_ylabel("Latitude")
plt.savefig(f"{file_name}_Data.png")
plt.show()

补充说明

  • matshow默认Y轴从上到下是0到矩阵行数-1,所以需要用invert_yaxis()翻转,让实际纬度(14.5-15.5)从下到上递增。
  • 两种方法都能保持热力图的图形效果不变,仅修改坐标轴的刻度显示和坐标系方向。

内容的提问来源于stack exchange,提问作者Abir Abhyankar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:50:14