我有一个三列数组,包含两个参数,即 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 pltfrom matplotlib.mlab import griddatax = 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='线性'代替。” 当我使用 interp='linear' 时,运行代码会持续很长时间而没有任何结果。有没有办法解决这个问题?
1 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
看起来您正在为列中的所有值创建一个“网格” 。相反,您可能希望按递增顺序创建一个规则的数字网格。例如,在数据的最小值和最大值之间使用 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)
添加回答
举报
0/150
提交
取消