ValueError: Уровни контура должны увеличиваться - как построить 3 элемента данных - PullRequest
0 голосов
/ 05 марта 2020
import numpy as np
from matplotlib import pyplot as plt

data = np.random.normal(0,1,[100,3])

x = data[:,0]
y = data[:,1]

z = data[:,2]

plt.contour([x,y],z)

Когда я запускаю этот код с фиктивными данными, я получаю:

ValueError: Contour levels must be increasing

Вы представляете, что бы это значило и как я мог это исправить?

1 Ответ

0 голосов
/ 05 марта 2020

plt.contour немного конкретен относительно его ввода, значения z должны быть на значениях в прямоугольной сетке angular 2D, см., Например:

import matplotlib.pyplot as plt
import numpy as np

x = np.expand_dims(np.arange(1,11,1), axis=1)
y = np.expand_dims(np.arange(2,21,2), axis=0)
z = y * x

print(x.shape)
print(y.shape)
print(z.shape)

plt.figure()
plt.contour(z)
plt.show()

Вы также можете указать x и y значения для plt.contour с помощью np.meshgrid:

XX,YY = np.meshgrid(x,y)
plt.figure()
plt.contour(XX, YY, z)
plt.show()

Если у вас есть z-значения с нерегулярными значениями для x и y, вы можете использовать plt.tricontour, см. следующий пример:

from matplotlib.tri import Triangulation

data = np.random.normal(0,1,[100,3])
x = data[:,0]
y = data[:,1]
#z = data[:,2]
z = x * y

tri = Triangulation(x,y)

plt.figure()
plt.tricontour(tri, z, )
plt.scatter(x,y, c=z)
plt.show()

Редактировать: из комментария Йохана C я узнал, что это можно упростить без импорта matplotlib.tri:

plt.figure()
plt.tricontour(x,y,z)
plt.scatter(x,y, c=z)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...