【问题标题】:How do I plot a column vector as a contour with non uniform grid points that are also column vectors? [duplicate]如何将列向量绘制为具有非均匀网格点的轮廓,这些点也是列向量? [复制]
【发布时间】:2019-02-25 19:48:53
【问题描述】:

我有数据 (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】:

numpy.meshgrid 对于非统一的一维域应该没有问题。但是,您的二维数据在数据文件中分布不规则(参见帖子末尾的图表)。这还有其他问题。但是,正如@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:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    相关资源
    最近更新 更多