从1D列表创建2D阵列并绘制为2D热图

时间:2016-03-01 16:20:17

标签: python arrays plot

Python初学者。我正在使用numpy和matplotlib。

我有一个正弦函数,可生成100项宽的1D列表。我想把它变成一个2D列表/数组/矩阵,它是100项宽和50项长,其中该矩阵的每一行都与最后一行相同(这里的数字是任意的)。

然后我想将其绘制为灰度x-y热图,其中颜色与每个索引的数量成比例。类似的东西:

enter image description here

我生成我的1D数组:

for i in range(0,100):
    x_array[i] = (np.cos(a[i]))**2 * (np.sinc(b[i]))**2

a和b之前定义的长度相同的列表。然后我对n进行绘制,得到一条漂亮的1D线。

物理学家会认识到这是两个狭缝的干涉图案。我想添加任意长度的另一个尺寸,以便能够在x / y /强度空间中绘制条纹。

是否有一个简单的循环我可以实现' copy'这个列表x次,然后一个方法供我绘制这些?提前谢谢。

3 个答案:

答案 0 :(得分:1)

要复制数组,您可以使用列表推导:

x_matrix=[x_array for i in range(50)]

如果你没有像matplotlib这样的好包装,那么绘图会更难。 然后就是

import matplotlib.pyplot as plt plt.imshow(x_matrix)

答案 1 :(得分:0)

我认为您使用的是numpy,因为您提到了绘图,matplotlib似乎是事实上的标准。如果是这种情况,您可以将数组乘以np.ones(required_shape),广播应该做你想要的......例如:

>>> import numpy as np
>>> a = np.arange(10)
>>> a * np.ones((5, 10))
array([[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.]])

这里我从原始数组中构造了一个长度为10的5x10数组。

如果x_array不是一个刚开始的numpy数组,那么将它变成一个非常容易:

x_array = np.array(x_array)

答案 2 :(得分:0)

如果你想要一个与你描述的图像相对应的数组,你可以简单地使用NumPy的切片表示法来填充具有相同值的所有“行”:

I = np.zeros((50,100))
I[:] = np.cos(np.pi * d * x / lam)**2 * np.sinc(np.pi * b * x / lam)**2