当我有x,y,强度时,我不知道如何创建热图(或等高线图)。我有一个这样的文件:
0,1,6
0,2,10
....
目前为止:
with open('eye_.txt', 'r') as f:
for line in f:
for word in line.split():
l = word.strip().split(',')
x.append(l[0])
y.append(l[1])
z.append(l[2])
尝试使用pcolormesh,但它需要一个shape对象,我不确定如何将这些列表转换为numpy数组。
我试过:
i,j = np.meshgrid(x,y)
arr = np.array(z)
plt.pcolormesh(i,j,arr)
plt.show()
它告诉我:
IndexError: too many indices
有人能阻止我用键盘猛击我的头吗?
索引错误是因为pcolormesh需要一个2D数组,而
arr
是一个1D向量。如果我理解正确,你的输入文件有在这种情况下,
meshgrid(x,y)
将无法工作,因为它需要类似于meshgrid(range(xmax),range(ymax))
的东西,即没有重复值的向量。在您的例子中,您需要找出有多少不同的x和y值,然后简单地将向量重塑为2D数组。
好吧,这有几个步骤。
首先,读取数据文件的更简单的方法是使用^{} 。可以将分隔符设置为带
delimiter
参数的逗号。接下来,我们要制作一个由
x
和y
组成的二维网格,因此我们只需要存储从这些到数组的唯一值,以馈送到numpy.meshgrid
。最后,我们可以使用这两个数组的长度来重塑我们的
z
数组。(注意:这个方法假设有一个规则的网格,网格上的每个点都有一个
x
、y
和z
)。例如:
如果没有规则网格(即每个网格值x和y的z值),则可以使用基于pandas数据帧的更通用的方法:
pivot方法将使用索引和列中的唯一值来构造一个将缺少度量值设置为NaN的表。然后可以将表格绘制为热图。
相关问题 更多 >
编程相关推荐