Тепловая карта для трехмерных значений диаграммы рассеяния (Python) - PullRequest
1 голос
/ 02 февраля 2012

Это похоже на простое задание или повторение, но потерпите меня ... Я немного искал и не нашел простых ответов.

У меня естьграфик рассеяния, который я хотел бы отобразить в виде тепловой карты.Мои значения выглядят так:

{ (3, 3): 1.7314, (3,4):-6.99, (4,3):-17.3, (4, 4):-100.0 }

Я хотел бы отобразить матрицу, начиная с ячейки (3,3), которая имеет яркость 1.7314 и т. Д.

Я нашел нескольковопросы и ответы, касающиеся ситуаций, в которых вы предоставляете списки двух размерных кортежей (X, Y) и значение Z (интенсивность) для каждой точки (x,y,z) создается числом вхождений вокруг (x, y).

Я также использовал imshow, чтобы нарисовать такой сюжет, но для imshow вы отбрасываете (3,3) и т. Д. Так что все может быть странно смещено.Один из вариантов - использовать imshow, а затем вручную настраивать метки осей.Но я чувствую, что кто-то , должно быть, решил это прежде, не взламывая pylab слишком много.

Каков наилучший способ сделать это?

1 Ответ

2 голосов
/ 02 февраля 2012

Хорошо, давайте попробуем простой пример, используя ваши примерные данные:

import numpy as np
from pylab import * 

data = { (3, 3): 1.7314, (3,4):-6.99, (4, 3):-17.3, (4, 4):-100.0 }
matrix = np.zeros((5, 5))
for (x, y), z in data.items():
    matrix[y,x] = z

imshow(matrix[3:, 3:], origin='lower', interpolation='none', extent=[2.5, 4.5, 2.5, 4.5])
show()

Как видите, вы можете управлять осями, задав пределы с помощью extent.По умолчанию (если None) будет (-0.5, numcols-0.5, -0.5, numrows-0.5) (слева, справа, снизу, сверху), если вы укажете, что вы хотите origin в нижней части для оси Y.

Также, interpolation='none' важно для вашего случая.

...