Matplotlib imshow绘图如何将坐标轴刻度值乘以100倍
问题本质
plt.imshow() 默认以输入二维数组的行列索引值作为x、y轴的刻度基准,和数组内存储的数值大小无关。你给数组整体乘以100,只会改变每个位置对应的色值映射,完全不会影响坐标轴的刻度生成逻辑,所以刻度不会按预期放大。
实现方法
你可以通过指定坐标范围+自定义刻度的方式直接实现需求,代码如下:
import matplotlib.pyplot as plt import numpy as np data = np.loadtxt("input.txt") # 获取输入数据的行列数,计算放大100倍后的坐标范围 # extent参数格式为[x轴起点, x轴终点, y轴终点, y轴起点],适配imshow默认左上角为原点的规则 height, width = data.shape plt.imshow( 100 * data, cmap='jet', interpolation='none', extent=[0, width*100, height*100, 0] ) # 直接传入你需要的目标刻度序列 target_ticks = [0, 2500, 5000, 7500, 10000, 12500, 15000, 17500, 20000] plt.xticks(target_ticks) plt.yticks(target_ticks) plt.show()
如果不想修改坐标映射范围,也可以在绘图后单独修改刻度标签,保持像素位置和索引对齐,只把显示的标签值放大100倍:
import matplotlib.pyplot as plt import numpy as np data = np.loadtxt("input.txt") plt.imshow(100*data, cmap='jet', interpolation='none') ax = plt.gca() target_ticks = [0, 2500, 5000, 7500, 10000, 12500, 15000, 17500, 20000] # 刻度位置对应原始索引值(标签值/100),标签直接显示放大100倍后的数值 ax.set_xticks([tick/100 for tick in target_ticks], labels=target_ticks) ax.set_yticks([tick/100 for tick in target_ticks], labels=target_ticks) plt.show()
提示:如果你的输入数组尺寸不是200*200,只需要对应调整
extent的终点值和刻度列表即可,核心是建立数组索引和实际显示刻度值1:100的映射关系。
内容的提问来源于stack exchange,提问作者viraj moil
相关产品推荐
相关产品推荐

