gpt4 book ai didi

python - 如何使用 imshow 使用 Matplotlib 绘制具有非线性 y 轴的图像?

转载 作者:太空狗 更新时间:2023-10-29 20:11:52 26 4
gpt4 key购买 nike

如何使用 Matplotlib 将二维数组绘制为图像具有相对于 y 值的 2 次方的 y 标度?

例如,我的数组的第一行在图像中的高度为 1,第二行的高度为 4,依此类推(单位无关)文字不好解释,请看这张图(我要的就是这样的结果):

alt text http://support.sas.com/rnd/app/da/new/802ce/iml/chap1/images/wavex1k.gif

如您所见,第一行比上一行小 2 倍,依此类推。

对于那些对我为什么要尝试这样做感兴趣的人:

我有一个相当大的 float 组 (10, 700000),代表声音文件的离散小波变换系数。我正在尝试使用这些系数绘制尺度图。我可以复制数组 x 次,直到获得所需的图像行大小,但内存无法容纳这么多信息...

最佳答案

你试过变换坐标轴吗?例如:

ax = subplot(111)
ax.yaxis.set_ticks([0, 2, 4, 8])
imshow(data)

这意味着对于不存在的坐标,数据中必须存在间隙,除非有一种方法可以提供转换函数而不是仅列出列表(从未尝试过)。

编辑:

我承认这只是一个线索,而不是一个完整的解决方案。这是我更详细的意思。

假设您的数据位于数组 a 中。您可以使用这样的转换:

class arr(object):
@staticmethod
def mylog2(x):
lx = 0
while x > 1:
x >>= 1
lx += 1
return lx
def __init__(self, array):
self.array = array
def __getitem__(self, index):
return self.array[arr.mylog2(index+1)]
def __len__(self):
return 1 << len(self.array)

基本上,它将使用 mylog2 函数转换数组或列表的第一个坐标(您可以根据需要转换 - 它是自制的 log2 的简化版)。优点是,您可以在需要时将其重新用于另一个转换,并且您也可以轻松控制它。

然后将您的数组映射到这个数组,它不会生成副本,而是实例中的本地引用:

b = arr(a)

现在可以显示了,例如:

ax = subplot(111)
ax.yaxis.set_ticks([16, 8, 4, 2, 1, 0])
axis([-0.5, 4.5, 31.5, 0.5])
imshow(b, interpolation="nearest")

这是一个示例(带有包含随机值的数组):

alt text http://img691.imageshack.us/img691/8883/clipboard01f.png

关于python - 如何使用 imshow 使用 Matplotlib 绘制具有非线性 y 轴的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com