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

我有一个三列数组,包含两个参数,即 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='线性'代替。” 当我使用 interp='linear' 时,运行代码会持续很长时间而没有任何结果。有没有办法解决这个问题?


繁华开满天机
浏览 187回答 1
1回答

qq_笑_17

看起来您正在为列中的所有值创建一个“网格” 。相反,您可能希望按递增顺序创建一个规则的数字网格。例如,在数据的最小值和最大值之间使用 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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python