Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从matplotlib中的三列阵列打印等高线_Python_Matplotlib_Plot - Fatal编程技术网

Python 从matplotlib中的三列阵列打印等高线

Python 从matplotlib中的三列阵列打印等高线,python,matplotlib,plot,Python,Matplotlib,Plot,我有一个三列数组,包含两个参数,x轴和y轴,以及这两个参数的卡方。我应该用这两个参数做一个网格,然后根据卡方值绘制1-sigma、2-sigma和3-sigma等高线。如何在matplotlib中执行此操作? 这是我的密码: x(1.txt文件中的第二列)和y(第三列)应该从最小到最大排列,为了制作x和y轴,我认为可以使用meshgrid。z(“1.txt”文件中的第一列)是卡方 import numpy as np import matplotlib.pyplot as plt from m

我有一个三列数组,包含两个参数,x轴和y轴,以及这两个参数的卡方。我应该用这两个参数做一个网格,然后根据卡方值绘制1-sigma、2-sigma和3-sigma等高线。如何在matplotlib中执行此操作? 这是我的密码: x(1.txt文件中的第二列)和y(第三列)应该从最小到最大排列,为了制作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。请从安装它,或改用interp='linear'
当我使用interp='linear'时,运行代码会持续很长时间而没有任何结果。有什么办法可以解决这个问题吗?

看起来您正在创建一个列中所有值的“网格”。相反,您可能希望以递增的顺序创建一个规则的数字网格。例如,在数据的最小值和最大值之间使用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)
另请参阅

但是请注意,
matplotlib.mlab.griddata
已在较新版本的matplotlib中删除。报告告诉您一些备选方案

特别是考虑使用原始值“代码> x,y,z</代码>,

直接绘制三角形轮廓。
plt.tricontour(x,y,z)

如果没有任何示例数据、尝试的代码和所需的示例输出(如果可能),将很难在这里获得具体的解决方案。你应该看看如何根据你的建议创建一个等高线图,我可以得到等高线图。然而,还有一些额外的轮廓线。而且我也不能正确地得到2西格玛轮廓线。有没有办法只得到1-sigma、2-sigma和3-sigma等高线而不需要任何额外的线?对不起,我不知道2D数据集的2-sigma等高线是什么。如果你能在问题中解释一下,我可能会提供进一步的帮助。它实际上是一个3D数据集:参数x、参数y和卡方检验。好的,但是卡方检验的哪些值对应于1-sigma、2-sigma和3-sigma?那么,你的意思是我应该添加一行,例如“levels=[0,2.6,5.2,9.5]”,根据1-sigma进行调整,2-西格玛和3-西格玛。然后用“plt.tourtf(X,Y,Z,levels=levels,colors=['g','r','b'])绘制它,以得到正确的结果。我说得对吗?