построение контуров из трехколоночного массива в matplotlib - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть массив из трех столбцов, содержащий два параметра, которые являются осями x и y, и хи-квадрат этих двух параметров.Я должен создать сетку из этих двух параметров, а затем построить контуры 1-сигма, 2-сигма и 3-сигма, учитывая значения хи-квадрат.Как я могу сделать это в matplotlib?Вот мой код: x (который является вторым столбцом в файле «1.txt») и y (который является третьим столбцом) должны быть расположены от min до max, чтобы сделать оси x и y, я думал, что этоможет быть сделано с помощью сетки.И 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: использовать interp = 'nn' (Natural Neighborинтерполяция) в griddata, необходимо установить natgrid. Либо установить его из http://github.com/matplotlib/natgrid, либо использовать вместо него interp = 'linear'. "Когда я использую interp = 'linear', выполнение кода будет длиться долго без какого-либо результата.Есть ли способ решить эту проблему?

1 Ответ

0 голосов
/ 12 сентября 2018

Похоже, вы создаете "сетку" из всех значений в ваших столбцах.Вместо этого вы хотели бы создать регулярную сетку чисел в возрастающем порядке.Например, используя 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...