如何将列向量绘制为具有非均匀网格点的轮廓,这些网格点也是列向量? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

我有下面给出的数据(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()
python numpy matplotlib contour
1个回答
1
投票

numpy.meshgrid应该对非均匀的1-d域没有问题。但是,您的二维数据会不规则地分布在数据文件中(请参阅帖子末尾的图表)。这还有其他问题。但是,正如@ Thomas-Kühn所建议的那样,matplotlib.pyplot.tricontourmatplotlib.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)

ab数据的结果在左侧和右侧(注意黑色将两个数字分开,白色表示缺少数据):

a on left, b on right

由于数据的稀疏性,使用matplotlib.pyplot.scatter(x,y,c=a)的散点图也可能有用(当然有足够的xy轴标签):

scatter plot, a on left, b on right

或者将填充的轮廓图与点的位置表示相结合(将先前的tricontourf与域的简单plot组合:

a on left and b on right

最后,你可能会喜欢,matplotlib.pyplot.hexbin

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.