Я бы хотел сделать такую тепловую карту (показанную на FlowingData ):
Исходные данные здесь , но можно использовать случайные данные и метки, т.е.
import numpy
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = numpy.random.rand(4,4)
Создать тепловую карту в matplotlib достаточно просто:
from matplotlib import pyplot as plt
heatmap = plt.pcolor(data)
И я даже нашел аргументы цветовой карты, которые выглядят правильно:heatmap = plt.pcolor(data, cmap=matplotlib.cm.Blues)
Но помимо этого, я не могу понять, как отображать метки для столбцов и строк и отображать данные в правильной ориентации (начало координат вверху слева, а не внизу слева).
Попытки манипулировать heatmap.axes
(например heatmap.axes.set_xticklabels = column_labels
) потерпели неудачу. Что мне здесь не хватает?
python
matplotlib
data-visualization
heatmap
Джейсон Сундрам
источник
источник
Ответы:
Это поздно, но вот моя реализация на Python тепловой карты NBA с текущими данными.
обновлено: 04.01.2014 : всем спасибо
Результат выглядит так:
Там в IPython ноутбук со всеми этим кодом здесь . Я многому научился из переполнения, поэтому, надеюсь, кому-то это пригодится.
источник
pcolor
подобное, но с указанием числовых значений. ИЛИ: Я хочу создать matplotlib,table
который раскрашивает свои ячейки. Я видел решения другой проблемы, и они эстетически некрасивы. Выглядит отлично, если бы я только умел накладывать числа.Модуль seaborn python основан на matplotlib и создает очень красивую тепловую карту.
Ниже представлена реализация с seaborn, разработанная для ноутбука ipython / jupyter.
Результат выглядит так: я использовал цветовую карту matplotlib Blues, но лично нахожу цвета по умолчанию довольно красивыми. Я использовал matplotlib для поворота меток оси x, так как не смог найти синтаксис seaborn. Как отмечает grexor, необходимо было указать размеры (fig.set_size_inches) методом проб и ошибок, что меня немного расстраивало.
Как заметил Пол Х., вы можете легко добавить значения на тепловые карты (annot = True), но в этом случае я не думал, что это улучшило цифру. Несколько фрагментов кода были взяты из отличного ответа joelotz.
источник
Основная проблема заключается в том, что вам сначала нужно установить местоположение ваших отметок x и y. Кроме того, это помогает использовать более объектно-ориентированный интерфейс для matplotlib. А именно,
axes
напрямую взаимодействовать с объектом.Надеюсь, это поможет.
источник
heatmap.axes
свойство, которое по какой-то причине ничего не делает.ax.xaxis.set_label_position('top')
но безуспешно.annot=True
при вызове ( stanford.edu/~mwaskom/software/seaborn/generated/… )Кто-то отредактировал этот вопрос, чтобы удалить использованный мной код, поэтому я был вынужден добавить его в качестве ответа. Спасибо всем, кто участвовал в ответе на этот вопрос! Я думаю, что большинство других ответов лучше, чем этот код, я просто оставляю это здесь для справки.
Благодаря Paul H и unutbu (ответившему на этот вопрос ) у меня есть довольно приятный результат:
И вот результат:
источник