Как я могу решить проблему измерения с помощью Python pcolor? - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть 3 списка, и я хотел бы сделать pcolor-сюжет.

ccplot = plt.pcolor (a, b, c, vmin = np.min (c), vmax = np.max (c))

форма a и b:(108,)

Проблема:

, когда форма c имеет (216,) Я получаю ошибку:

"ValueError: недостаточно значений для распаковки (ожидается 2, получен 1) "

, и когда я изменяю форму c, чтобы быть 2d массивом формы (10800, 2), я получаю ошибку:

" Ошибка типа: Размеры C(108, 2) несовместимы с X (108) и / или Y (108); см. Справку (pcolor) "

Пожалуйста, помогите мне разобраться с этим pcolor-графиком.Я ценю заранее.

С уважением, Трэвис h

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Проблема в том, что размеры массивов должны быть совместимы.Решение может быть достигнуто путем «изменения» форм a и b в (36,3), а затем создания сетки из них с помощью ax.pcolormesh ().Наконец, pcolor может быть нанесен на график, если c также преобразован в (36,3), то есть преобразован в двумерный массив.Обратите особое внимание на сетку, чтобы она имела смысл в зависимости от приложения.

a = a.reshape(36,3)
b = b.reshape(36,3)
c = c.reshape(36,3)

#making the mesh
a,b = np.meshgrid(a,b)

#pcolormesh
fig, ax0 = plt.subplots(1, 1)
c = ax0.pcolor(a, b, c)
plt.show()

pcolormesh больше подходит для больших наборов данных.

0 голосов
/ 11 декабря 2018

Я полагаю, что вы смотрите на реализацию pcolor неправильно.Если у вас есть c в виде массива (216,), это не имеет смысла, так как для распаковки ему нужны и значения i, и j, чтобы найти его местоположение в 2D сетке .pcolor должен иметь возможность доступа к c [i, j], а для одномерного массива, подобного (216,), это невозможно.

Также, когда у вас есть C (108,2), другие ваши массивы должны выглядеть как X (109,) Y (3,).Попробуйте следующий пример:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LogNorm

C = np.random.rand(6, 10)
X = range(11)
Y = range(7)

fig, ax0 = plt.subplots(1, 1)

c = ax0.pcolor(X, Y, C)
ax0.set_title('default: no edges')

plt.show()

Итак, c - это матрица 6x10, для которой требуются места для углов как для x, так и для y.Затем они должны иметь длину 7 и 11, чтобы предоставить все координаты для углов матрицы c.Для некоторых визуальных эффектов на углах вы можете перейти к https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pcolor.html, где первое изображение показывает вам, как связаны X, Y и C.

Надеюсь, это поможет!

...