如何调整imshow或同类函数的单元格宽度,使首尾单元格宽度减半?
实现imshow首尾单元格宽度为其他一半的方法
默认的imshow会强制所有单元格等宽,没法直接实现首尾单元格半宽的需求,换用pcolormesh可以自定义单元格的边界位置,从而实现目标效果。
具体实现步骤:
- 定义x轴的边界数组,让首尾两个单元格的宽度为中间单元格的一半。比如6个数据对应7个边界点:
x_edges = np.array([0, 0.5, 1.5, 2.5, 3.5, 4.5, 5.0]),第一个区间[0,0.5]和最后一个[4.5,5.0]宽度为0.5,中间每个区间宽度为1.0。 - 用
pcolormesh绘制,传入x边界、y边界(这里y方向只有一行,边界设为[0,1]即可)和数据矩阵。 - 调整坐标轴显示,让图形对齐更合理。
代码示例:
import numpy as np import matplotlib.pyplot as plt data = np.array([0. , 0.2 , 0.4 , 0.6 , 0.8 , 1. ]) fig, ax = plt.subplots() # 定义单元格的x轴边界,首尾宽度为中间的一半 x_edges = np.array([0, 0.5, 1.5, 2.5, 3.5, 4.5, 5.0]) y_edges = np.array([0, 1]) # 使用pcolormesh绘制不等宽单元格 ax.pcolormesh(x_edges, y_edges, data.reshape(1, -1), cmap='hot') # 调整坐标轴,让y轴只显示一行的范围 ax.set_ylim(y_edges[0], y_edges[-1]) # 隐藏y轴刻度,因为只有一行数据 ax.set_yticks([]) plt.show()
如果需要更精细化的控制,也可以用matplotlib.patches.Rectangle逐个绘制矩形并设置宽度,但pcolormesh的方式更简洁高效。
内容的提问来源于stack exchange,提问作者Joao_PS
相关产品推荐
相关产品推荐

