我具有以下形式的数据(link):
输入数据格式
Header: 'x' 'y' 'a' 'b'
x1 , y1 , ... (data)
x2 , y2 , ... (data)
x3 , y3 , ... (data)
: : :
xn-2, yn-2, ... (data)
xn-1, yn-1, ... (data)
xn , yn , ... (data)
它们是非均匀间隔的网格,在这种情况下,我想绘制一个填充轮廓,该轮廓由a,b着色。由于点的排列和不均匀性,我无法使用np.meshgrid
(如果我错了,请更正我)。如何将列向量绘制为轮廓,这些点的非均匀网格点也是列向量?
MWE
import numpy as np
import matplotlib.pyplot as plt
data = np.genfromtxt('./plot_data.dat', skip_header=1, dtype = None, delimiter = '\t')
test = np.column_stack([data[:,0],data[:,1],data[:,3]])
plt.imshow(test)
plt.xlim([np.min(data[:,0]), np.max(data[:,0])])
plt.ylim([np.min(data[:,1]), np.max(data[:,1])])
plt.show()
答案 0 :(得分:1)
numpy.meshgrid
对于非统一的1-d域应该没有问题。但是,您的二维数据在数据文件中分布不规则(请参见发布末尾的图)。这还有其他问题。但是,按照@Thomas-Kühn的建议,matplotlib.pyplot.tricontour
和matplotlib.pyplot.tricontourf
可以处理您的数据(以下我使用tricontourf
):
import numpy as np
import matplotlib.pyplot as plt
x,y,a,b = np.loadtxt('./plot_data.dat', skiprows=1, delimiter = '\t').T
plt.tricontourf(x,y,a)
a
和b
数据的结果在左右(请注意,黑色将两个数字分隔开,白色表示缺少数据):
由于数据的稀疏性,使用matplotlib.pyplot.scatter(x,y,c=a)
的散点图也可能有用(当然,要有足够的x
和y
轴标签):
或者将填充的等高线图与点的表示形式结合在一起(将先前的tricontourf
与域的简单plot
结合起来:
最后,您可能会喜欢matplotlib.pyplot.hexbin
: