Ошибка линии контура с контуром в python 3 - PullRequest
1 голос
/ 09 июля 2020

Я рисую контурный график в python 3 с помощью matplotlib и получаю странный результат. Сначала я использовал plt.contourf и заметил странный линейный артефакт север-юг в данных, которых, как я знал, не должно быть (я использовал смоделированные данные). Поэтому я изменил plt.contourf на plt.contour, и проблема, похоже, в том, что некоторые контуры краев по какой-то причине деформированы (см. Рисунок).

введите описание изображения здесь

К сожалению, мне трудно пройти мимо простой версии моего кода, потому что это часть большого приложения на основе GUI. Но вот что я делаю.

#grid the x,y,z data so it can be used in the contouring
self.beta_zi = 
#This is matplot griddata, not the scipy.interpolate.griddata
griddata(self.output_df['x'].values,self.output_df['y'].values,
                              self.output_df['Beta'].values,
                              self.cont_grid_x,
                              self.cont_grid_y,
                              interp='linear')

    #call to the contour itself
self.beta_contour=self.beta_cont_ax.contour(self.cont_grid_x,self.cont_grid_y,
                                  self.beta_zi,
                                  levels=np.linspace(start=0,stop=1, num=11, endpoint=True),
                                  cmap=cm.get_cmap(self.user_beta_cmap.get()))        

Это похоже на простую проблему, основанную на краях. Кто-нибудь видел это раньше, что может помочь. Я использую бэкэнд TK, который лучше работает с tkinter, основанным на GUI, который я написал.

ОБНОВЛЕНИЕ: Я также попытался перейти на scipy.interpolate.griddata, потому что griddata matplot устарела, но проблема та же и сохраняется, поэтому это должно быть с действующей функцией построения контура.

1 Ответ

0 голосов
/ 10 июля 2020

Я обнаружил, что проблема связана с тем, как я интерпретировал входные данные контура и данных сетки.

plt.contour and matplot.griddata takes 
x = x location of sample data
y = y location of sample data
z = height or z value of sample data
xi = locations of x tick marks on grid
zi = locations of y ticks marks on grid

Обычно xi и yi - это все местоположения каждого узла сетки, что я и поставлял, но в этом случае вам нужны только отметки unqiue на каждой оси.

Благодаря этому сообщению я понял это.

Контур Matplotlib из данных xyz: griddata invalid индекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...