这个问题在这里已有答案:
我有下面给出的数据(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()
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
: