fiz*_*fiz 8 python matplotlib heatmap
当我有x,y,强度时,我不知道如何创建热图(或等高线图).我有一个看起来像这样的文件:
0,1,6
0,2,10
....
Run Code Online (Sandbox Code Playgroud)
至今:
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])
Run Code Online (Sandbox Code Playgroud)
尝试使用pcolormesh,但它想要一个形状对象,我不确定如何将这些列表转换为numpy数组.
我试过了:
i,j = np.meshgrid(x,y)
arr = np.array(z)
plt.pcolormesh(i,j,arr)
plt.show()
Run Code Online (Sandbox Code Playgroud)
它告诉我:
IndexError: too many indices
Run Code Online (Sandbox Code Playgroud)
有人可以阻止我对着键盘砸我的头吗?
好的,这有几个步骤.
首先,一种更简单的方法来读取您的数据文件numpy.genfromtxt.您可以将分隔符设置为带delimiter参数的逗号.
接下来,我们要的二维网格x和y,所以我们只是需要存储从那些阵列喂以独特的价值观numpy.meshgrid.
最后,我们可以使用这两个数组的长度来重塑我们的z数组.
(注意:此方法假定您有一个常规网格,有一个x,y并且z对于网格上的每个点).
例如:
import matplotlib.pyplot as plt
import numpy as np
data = np.genfromtxt('eye_.txt',delimiter=',')
x=data[:,0]
y=data[:,1]
z=data[:,2]
## Equivalently, we could do that all in one line with:
# x,y,z = np.genfromtxt('eye_.txt', delimiter=',', usecols=(0,1,2))
x=np.unique(x)
y=np.unique(y)
X,Y = np.meshgrid(x,y)
Z=z.reshape(len(y),len(x))
plt.pcolormesh(X,Y,Z)
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您没有常规网格(即 x 和 y 的每个网格网格值的 z 值),您可以使用基于熊猫数据框的更通用的方法:
import pandas as pd
import seaborn as sns
import matplotlib.pypot as plt
data = pd.DataFrame(data={'x':x, 'y':y, 'z':z})
data = data.pivot(index='x', columns='y', values='z')
sns.heatmap(data)
plt.show()
Run Code Online (Sandbox Code Playgroud)
数据透视方法将使用索引和列中的唯一值来构造一个表,其中缺失测量值设置为 NaN。然后可以将该表绘制为热图。