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

如何在Matplotlib中设置非周期性增量的Y轴刻度

解决Matplotlib中Y轴刻度错位问题(非均匀参数网格)

问题原因

你的代码使用imshow时,通过extent将Y轴范围设为0到parb_increment[-1],但imshow会将35行数据均匀分布在这个范围内。而参数B的取值是非均匀的(比如16、18、20后连续到33,再间隔5到125),导致手动设置的parb_increment刻度位置和数据行的实际位置不匹配,出现错位。

解决方案

方案一:保留imshow,手动映射行索引到参数标签

直接将行索引作为刻度位置,替换为参数B的实际数值,确保每行对应正确的标签:

import matplotlib.pyplot as plt
import numpy as np

# 生成测试数据(替换为你的实际x数组)
x = np.random.rand(35, 225)

# Define parameter B values
parb_increment = [16, 18, 20] + list(range(21,34)) + list(range(35,126,5))

# Figure and axes
figure, axes = plt.subplots(figsize=(10, 8))

# Plotting:去掉extent的Y范围设置,使用默认行索引映射
im = axes.imshow(x, aspect='auto',
                 origin="lower",
                 cmap='Blues',
                 interpolation='none')

# 正确设置Y轴刻度:行索引对应参数B的数值
axes.set_yticks(range(len(parb_increment)), labels=parb_increment)
# 调整Y轴范围,让刻度与行边缘对齐
axes.set_ylim(-0.5, len(parb_increment)-0.5)

# Colorbar
cb = figure.colorbar(im, ax=axes)
plt.show()

方案二:使用pcolormesh适配非均匀网格(更推荐)

pcolormesh支持非均匀坐标轴网格,能准确匹配参数B的非均匀取值:

import matplotlib.pyplot as plt
import numpy as np

# 生成测试数据(替换为你的实际x数组)
x = np.random.rand(35, 225)

# Define parameter B values
parb_increment = [16, 18, 20] + list(range(21,34)) + list(range(35,126,5))
# 参数A的网格边缘(0到225共225列,需要226个边缘点)
parA_edges = np.arange(0, 226)
# 计算参数B的网格边缘(35行需要36个边缘点,取相邻B值的中点作为边界)
parB_edges = np.concatenate([
    [parb_increment[0] - (parb_increment[1]-parb_increment[0])/2],
    (parb_increment[:-1] + parb_increment[1:])/2,
    [parb_increment[-1] + (parb_increment[-1]-parb_increment[-2])/2]
])

# Figure and axes
figure, axes = plt.subplots(figsize=(10, 8))

# 使用pcolormesh绘制非均匀网格
im = axes.pcolormesh(parA_edges, parB_edges, x,
                     cmap='Blues',
                     edgecolors='none')

# 设置Y轴刻度为参数B的实际数值
axes.set_yticks(parb_increment)

# Colorbar
cb = figure.colorbar(im, ax=axes)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:05:26