在matplotlib中绘制三列数组的轮廓

问题描述 投票:-3回答:1

我有一个三列数组,包含两个参数,即x和y轴,以及这两个参数的卡方。我应该对这两个参数进行网格化,然后考虑卡方值,绘制1-sigma,2-sigma和3-sigma等值线。我怎么能在matplotlib中做到这一点?这是我的代码:x(这是“1.txt”文件中的第二列)和y(这是第三列)应该从min到max排列,为了制作x和y轴,我想它可以使用meshgrid完成。而z(“1.txt”文件中的第一列)是卡方。

import numpy as np 
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
x = np.genfromtxt('1.txt', usecols=(1))
y = np.genfromtxt('1.txt', usecols=(2))
z = np.genfromtxt('1.txt', usecols=(0))
plt.figure()
X, Y = np.meshgrid(x,y) 
Z= griddata(x,y,z,X,Y)
contour=plt.contour(X,Y,Z)
plt.show()

此代码面对错误:“RuntimeError:要在griddata中使用interp ='nn'(自然邻域插值),必须安装natgrid。要么从http://github.com/matplotlib/natgrid安装它,要么使用interp ='linear'代替。”当我使用interp ='linear'时,运行代码将持续很长时间而没有任何结果。有什么方法可以解决这个问题吗?

python matplotlib plot
1个回答
0
投票

看起来您正在创建列中所有值的“网格”。相反,您需要按递增顺序创建常规数字网格。例如。在数据的最小值和最大值之间使用100个值

X = np.linspace(x.min(), x.max(), 100)
Y = np.linspace(y.min(), y.max(), 100)
Z = griddata(x, y, z, xi, yi, interp='linear')
contour=plt.contour(X, Y, Z)

另见example

但请注意,matplotlib.mlab.griddata已在较新版本的matplotlib中删除。 new example告诉你一些替代方案。

特别是考虑使用原始值x,y,z直接绘制三角形轮廓,

plt.tricontour(x,y,z)
© www.soinside.com 2019 - 2024. All rights reserved.