Python总结一 Numpy库与Pylab库之间数据转换

Numpy库与Pylab库之间数据转换

今天在使用numpy库与pylab绘图库之间的数据交换时,遇到了一些与常识颠倒的现象,出现该现象是因为自己没有仔细阅读两个库中的官方设定。因此,借此机会,记录下来,以供后续参考。

先看代码

import numpy as np
from pylab import *


# 创建一个数组
maze = np.full((5, 5), int(5), dtype=np.int8)

maze[4,1] = 3  # 修改坐标(4,1)处数值

# 绘图
plt.imshow(maze, cmap=plt.cm.hot, interpolation='nearest', vmin=0, vmax=5)
plt.colorbar()  # 设置右侧颜色条形图
xlim(0, 5)  # 设置显示x轴的范围
ylim(0, 5)  # 设置显示y轴的范围
xticks = np.arange(0,6,1) # 产生0-6之间步长为一的数组
yticks = np.arange(0,6,1) # 产生0-6之间步长为一的数组
plt.xticks(xticks)  # 绘制x轴
plt.yticks(yticks)  # 绘制y轴
plt.show()

运行结果如下,这就和常见思维相悖。 程序的思维是修改坐标(4, 1)处数值,因此在显示时应在红色箭头所指的红色区块,然而结果图片显示的是黄色部分。

运行结果

问题解释

numpy设置是数组的第四行第一列,当传递到pylab时,因为原点设置不同,因此导致,程序在第四行第一列显示时,实际是在坐标(1,4)处。

手绘示意图

解决方式

为了使之符合常识,实际上,只需要对矩阵进行转置操作。

import numpy as np
from pylab import *


# 创建一个数组
maze = np.full((5, 5), int(5), dtype=np.int8)
maze[4,1] = 3  # 在(4,1)坐标处设置标记
maze = maze.T  # 对矩阵进行转置

# 绘图
plt.imshow(maze, cmap=plt.cm.hot, interpolation='nearest', vmin=0, vmax=5)
plt.colorbar()  # 设置右侧颜色条形图
xlim(0, 5)  # 设置显示x轴的范围
ylim(0, 5)  # 设置显示y轴的范围
xticks = np.arange(0,6,1) # 产生0-6之间步长为一的数组
yticks = np.arange(0,6,1) # 产生0-6之间步长为一的数组
plt.xticks(xticks)  # 绘制x轴
plt.yticks(yticks)  # 绘制y轴
      
plt.show()

运行结果如下所示

修正结果

总结

问题本身并不是非常的困难,只是现象有点反常理,因此有些令人难以琢磨。只要明确坐标原点的设置,以及两个库交换数据的处理,就能修正这一问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值