我有一个三列数组,包含两个参数,分别是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。要么从http://github.com/matplotlib/natgrid安装,要么使用interp ='linear'。 当我使用interp ='linear'时,运行代码将持续很长时间而没有任何结果。有什么办法可以解决这个问题?
答案 0 :(得分: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)