Контурная диаграмма Matplotlib с неоднородными матричными сетками - PullRequest
0 голосов
/ 12 июня 2019

Я хотел бы нарисовать контур функции f (x, y) против x и xy.Интервал в сетке y не такой, как в сетке x, поэтому xy является двухмерным, тогда как x одномерным.

Я не знаю, как настроить сетки.Функция tricontourf может работать с неоднородными сетками, но это только кажется, если обе оси одномерны.contour может обрабатывать матрицы, но только для f (x, y), тогда как одна из осей должна быть матрицей.

Псевдокод будет выглядеть следующим образом:

import matplotlib.pyplot as plt

def twoDfunction(x,y):
   return x + y # my function is more complicated than this

xaxis = np.linspace(0,10,100)
yaxis = np.linspace(0,10,22)
xminusyaxis = np.subtract(xaxis,yaxis)
functionsurfacevalues = twoDfunction(xaxis,yaxis)

fig =plt.figure(figsize=(10,10),dpi=300,facecolor='w')
ax1 = plt.subplot(111)
ax1.tricontourf(xaxis, xminusyaxis, functionsurfacevalues)

Я хотел бы, чтобы псевдокод строил графики functionsurfacevalues против x и xminusy.

1 Ответ

1 голос
/ 13 июня 2019

Что вам нужно сделать, это создать свою сетку, используя np.meshgrid(), а затем построить график contour или contourf. np.meshgrid создаст нерегулярные сетки на основе того, что вы им дадите.Вам не нужен график поверхности, потому что ваши данные на самом деле не являются поверхностью.

Основная проблема, с которой вы столкнулись, заключается в том, что, поскольку ваши оси x и y имеют разную длину, вы не можете их вычесть.В противном случае решение простое, и вы можете следовать следующему коду.

import matplotlib.pyplot as plt

def twoDfunction(x,y):
   return (x + y) # my function is more complicated than this

xaxis = np.linspace(0,10,100)
yaxis = np.linspace(0,5,100)

xminusyaxis = np.subtract(xaxis,yaxis)

xx,yy = np.meshgrid(xaxis,xminusyaxis)

fig =plt.figure(figsize=(10,10),dpi=300,facecolor='w')
ax1 = plt.subplot(111)
ax1.contourf(xx, yy, twoDfunction(xx,yy))


plt.show()

enter image description here

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