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

matplotlib imshow绘制切片后DataFrame出现坐标轴不对齐问题

问题原因

  1. 切片后的DataFrame未重置索引:用iloc切片后,df的行索引依然保留原始的8~247,列索引保留原始的10~1013,而非从0开始计数。
  2. 绘图顺序和共享轴逻辑冲突:先调用imshow绘制图像时,imshow默认将240行、1004列的数组映射到x:0~1003、y:0~239的坐标轴范围;后续绘制投影图时,x投影的y坐标用的是原始行索引8~247,y投影的x坐标用的是原始列索引10~1013,设置共享坐标轴后,matplotlib会自动拉伸坐标轴范围适配两个图的全部数据,最终坐标轴范围被拉到x:0~1013、y:0~247,就出现了多余的空白区域。
  3. 关闭共享轴后投影图不匹配:关闭共享轴后imshow的坐标轴范围可以恢复为默认的0~1003、0~239,但投影图本身的坐标轴还是基于原始索引生成,自然不会和imshow的范围同步。

解决方法

有两种常用方案可选:

方案1:切片后重置DataFrame的索引

将切片后的DataFrame的行、列索引重置为从0开始的连续值,和imshow默认的坐标轴映射规则匹配,修改切片部分代码:

df = df.iloc[8:df.shape[0]-8,10:df.shape[1]-10]
# 新增以下两行重置索引
df.index = range(df.shape[0])
df.columns = range(df.shape[1])
setData[x] = df

方案2:为imshow指定extent参数

手动设置imshow的坐标轴范围,使其和DataFrame的原始索引对齐,注意imshow的y轴默认是上大下小,所以extent的y轴参数要倒置,修改imshow调用代码:

ax[0][0].imshow(img,aspect='auto',cmap='plasma',
                vmin=img.stack().mean()-2*img.stack().std(),
                vmax=img.stack().mean()+2*img.stack().std(),
                # 新增extent参数:[xmin, xmax, ymax, ymin]
                extent = [img.columns.min(), img.columns.max(), img.index.max(), img.index.min()])

两种方案选其一即可解决坐标轴不匹配、出现空白的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:04