我有一個三列數(shù)組,包含兩個參數(shù),即 x 軸和 y 軸,以及這兩個參數(shù)的卡方??紤]到卡方值,我應(yīng)該制作這兩個參數(shù)的網(wǎng)格,然后繪制 1-sigma、2-sigma 和 3-sigma 等高線。我怎樣才能在 matplotlib 中做到這一點?這是我的代碼:x(這是“1.txt”文件中的第二列)和 y(這是第三列)應(yīng)該從最小到最大排列,為了制作 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' 時,運行代碼會持續(xù)很長時間而沒有任何結(jié)果。有沒有辦法解決這個問題?
1 回答

qq_笑_17
TA貢獻1818條經(jīng)驗 獲得超7個贊
看起來您正在為列中的所有值創(chuàng)建一個“網(wǎng)格” 。相反,您可能希望按遞增順序創(chuàng)建一個規(guī)則的數(shù)字網(wǎng)格。例如,在數(shù)據(jù)的最小值和最大值之間使用 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
提交
取消