1 Вопрос: Создать NonUniformImage на основе массива Numpy 2d с пользовательскими шириной и высотой ячейки

вопрос создан в Wed, May 8, 2019 12:00 AM

Я пытаюсь создать «тепловую карту» с Matplotlib из 2d Numpy Array и обнаружил параметр NonUniformImage здесь . Ниже приведена простая одиночная версия. К сожалению, я не могу изменить х без изменения у. Ошибка pyhton Propmpts: Axes don't match array shape

Воспроизводимый пример

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage
from matplotlib import cm

x = np.arange(6)
y = np.arange(6)
z = x[:, np.newaxis].dot(y[:, np.newaxis].transpose())

fig, ax = plt.subplots()
im = NonUniformImage(ax, interpolation='nearest', extent=(0, len(x)-1, 0, len(y)-1))
im.set_data(x, y, z)
ax.images.append(im)
ax.set_xlim(0, len(x)-1)
ax.set_ylim(0, len(y)-1)

Моя цель - построить карту на основе массива Numpy 2d с «пользовательскими ячейками сетки». Это означает, что я могу назначить x и y с нерегулярным рядом (например, np.array([0.5,3,8,15,15.4])). Я знаю, что x и y, которые назначаются, представляют центр ячейки, поэтому последнее, что я хотел бы решить, это то, что график полностью виден (если это возможно).

Как сделать изображение, которое имеет другое ограничение (не квадратное), с настраиваемой шириной и высотой в зависимости от двух списков?

    
0
  1. Когда я запускаю ваш код, я получаю это изображение . Разве это не то, что вы хотите? Или вы получаете другой результат?
    2019-05-08 22: 55: 18Z
  2. Нет, я получил тот же результат, но я могу создавать только изображения с одинаковыми размерами (например, 6x6, 8x8 или 21x21). Я хотел бы сделать изображение 60 х 29 и иметь пользовательские высоту и ширину в зависимости от списков. Я изменил вопрос, чтобы сделать его более понятным.
    2019-05-09 07: 30: 20Z
1 ответ                              1                         

Я полагаю, вы допустили ошибку, указав z. Возможно, вам нужно

x = np.arange(6)
y = np.arange(8)
z = x[np.newaxis,:] * y[:, np.newaxis]
print(z.shape)

такой, что форма (8,6).

    
1
2019-05-09 11: 51: 01Z
источник размещен Вот