использование matlab meshgrid

Извините, я должен продолжать возвращаться к проблеме, скопирующей нерегулярно разнесенные данные. Кажется, я не вижу четких ответов на вопросы о том, как собирать данные в обычную сетку, а документация по программному обеспечению для меня хороша для тех, кто уже знает. У меня есть данные x, y, z по 29 пунктам, с заголовком «Lon Lat Z». для построения контуров с этими данными вот что я делаю:

  1. После прочтения данных сделайте 300-300 точек регулярной сетки, на которую следует интерполировать

  2. Создание python pylab / matplotlib exe с помощью pyinstaller
  3. Определение дискретной цветовой схемы для imshow в matplotlib
  4. Python с matplotlib - рисование нескольких фигур параллельно
  5. Matplotlib: получение подзаголовков для заполнения фигуры
  6. Matplotlib не может отображать несколько контурных графиков на Django
  7. Время составления графика в Python с Matplotlib
  8. numcols, numrows = 300, 300 xi = np.linspace(data.Lon.min(), data.Lon.max(), numcols) yi = np.linspace(data.Lat.min(), data.Lat.max(), numcols) xi, yi = np.meshgrid(xi, yi) 

    Печать xi и print yi в этой точке дает мне x и y по моим данным, интерполируется более 300×300 точек.

  9. Интерполировать данные по сетке, созданной выше

     x, y, z = data.Lon.values, data.Lat.values, data.Z.values zi = griddata(x, y, z, xi, yi) 

    На данный момент, если я print zi я получаю

    [[- – – …, – – -]
    [- – – …, – – -]
    [- – – …, – – -]
    …,
    [- – – …, – – -]
    [- – – …, – – -]
    [- – – …, – – -]]

Я ожидал увидеть значения интерполированного z. У меня также есть объект карты, который должен быть наложен контурами. Функция построения рисунков дает мне отдельные цифры, для базовой карты и для контуров, с правильными значениями контура. Мой вопрос: почему я получаю пустые значения для контуров и как они выглядят правильно? Для полноты здесь моя функция построения графика

 fig=plt.figure(figsize=(8,4.5)) im = plt.contourf(xi, yi, zi) plt.show() 

Появляются два графика (базовая карта и контуры бок о бок)

Любая помощь пожалуйста.

  • Изменить разрешение imshow в ipython
  • Набрав греческие буквы и т. Д. На графиках Python
  • Как получить шрифт XKCD на matplotlib
  • Точный размер фигуры в matplotlib с метками заголовка, оси
  • Анимация панели Matplotlib - блиские листья старых кадров позади
  • `map.scatter` на базовой карте, не отображающей маркеры
  • One Solution collect form web for “использование matlab meshgrid”

    Следующее должно работать:

     numcols, numrows = 300, 300 xi = np.linspace(data.Lon.min(), data.Lon.max(), numrows) yi = np.linspace(data.Lat.min(), data.Lat.max(), numcols) xi, yi = np.meshgrid(xi, yi) x, y, z = data.Lon.values, data.Lat.values, data.Z.values points = np.vstack((x,y)).T values = z wanted = (xi, yi) zi = griddata(points, values, wanted) 

    Так что последняя строка – это то, как работает griddata (если вы используете scipy.interpolate.griddata ?) Проблема заключается в том, что вы, кажется, даете griddata пять аргументов, а если я посмотрю http://docs.scipy.org/doc/ scipy / reference / generated / scipy.interpolate.griddata.html # scipy.interpolate.griddata В нем говорится следующее:

     scipy.interpolate.griddata(points, values, xi, method='linear', fill_value=nan) 

    Так что в вашем случае, если у вас пять аргументов, где это происходит неправильно, я думаю (подтвердите, работает ли это, если вы сделаете это так, так как у меня нет данных, поэтому я не могу проверить, дает ли он правильный результат).

    Таким образом, в вашем случае ваши точки, где известны значения, – это x, а значения, которые известны в этой точке, – это значения y, а точки, в которых вы хотите их узнать, находятся в значениях z. Не знаю, как method='linear' справляется с вашим аргументом, и значение fill_value вы даете, тоже плохо, поэтому вы должны просто дать правильные входы (которые, я думаю, верны, как я их сформулировал), а затем он должен работать правильно.

    отредактируйте: прочитайте в своих данных как txt и напишите следующий код. Можете ли вы запустить его, чтобы убедиться, что это тот результат, который вам нужен?

     import numpy as np from scipy.interpolate import griddata class d(): def __init__(self): A0 = open("test.txt","rb") # i just copypasted your data into a txt (without first row), and reading it in in this class, so that the names are the same as yours A1 = A0.readlines() A = np.zeros((len(A1),3)) for i, l in enumerate(A1): li = l.split() A[i,0] = float(li[0]) A[i,1] = float(li[1]) A[i,2] = float(li[2]) self.Lon = A[:,0] self.Lat = A[:,1] self.Z = A[:,2] data = d() numcols, numrows = 30, 30 xi = np.linspace(data.Lon.min(), data.Lon.max(), numrows) yi = np.linspace(data.Lat.min(), data.Lat.max(), numcols) xi, yi = np.meshgrid(xi, yi) x, y, z = data.Lon, data.Lat, data.Z points = np.vstack((x,y)).T values = z wanted = (xi, yi) zi = griddata(points, values, wanted) import pylab as plt fig = plt.figure(0, figsize=(8,4.5)) im = plt.contourf(xi, yi, zi) plt.colorbar() fig2 = plt.figure(1, figsize=(8,4.5)) im = plt.scatter(xi, yi, c= zi) plt.colorbar() plt.show() 
    Python - лучший язык программирования в мире.