Обмен технологиями

Изучите Matplotlib — рисование тепловых карт

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Введение

Тепловые карты — это эффективный способ отображения матричных данных посредством цветового картирования. Матплотлибimshow Функции — мощный инструмент для создания различных тепловых карт. Прежде чем приступить к примеру, давайте сначала разберемся с основными параметрами:

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

2. Базовая тепловая карта

Сначала давайте нарисуем базовую тепловую карту, чтобы показать общее распределение набора данных:

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. data = np.random.random((10, 10)) # 生成随机矩阵数据
  4. plt.imshow(data, cmap='viridis', interpolation='nearest')
  5. plt.colorbar()
  6. plt.title('基本热力图')
  7. plt.show()

В этом простом примере мы используемviridisцветовая карта иnearestинтерполяционный метод.

изображение-20240204002238552

3. Пользовательское цветовое отображение.

Matplotlib поддерживает множество встроенных цветовых карт, но мы также можем настроить цветовую карту, чтобы сделать тепловую карту более персонализированной. Вот пример пользовательской карты цветов:

  1. custom_cmap = plt.cm.get_cmap('coolwarm', 5) # 从'coolwarm'中选择5个颜色
  2. plt.imshow(data, cmap=custom_cmap, interpolation='bilinear')
  3. plt.colorbar()
  4. plt.title('自定义颜色映射')
  5. plt.show()

4. Добавить комментарии

Добавление аннотаций к тепловой карте может более четко передать смысл данных.мы можем использоватьannotateФункция размечает значения на тепловой карте:

  1. fig, ax = plt.subplots()
  2. im = ax.imshow(data, cmap='plasma', interpolation='bicubic')
  3. for i in range(len(data)):
  4. for j in range(len(data[i])):
  5. text = ax.text(j, i, f'{data[i, j]:.2f}', ha='center', va='center', color='w')
  6. plt.colorbar(im)
  7. plt.title('带有注释的热力图')
  8. plt.show()

5. Тепловые карты разной формы

Matplotlib также поддерживает рисование тепловых карт различной формы, например, круглых или эллиптических точек. Вот пример:

  1. from matplotlib.patches import Ellipse
  2. fig, ax = plt.subplots()
  3. im = ax.imshow(data, cmap='YlGnBu', interpolation='bicubic')
  4. # 添加椭圆形状的点
  5. for i in range(len(data)):
  6. for j in range(len(data[i])):
  7. ellipse = Ellipse((j, i), 0.8, 0.8, edgecolor='w', facecolor='none')
  8. ax.add_patch(ellipse)
  9. plt.colorbar(im)
  10. plt.title('不同形状的热力图')
  11. plt.show()

6. Блокировать тепловую карту

Иногда нам хочется выделить определенные блоки в матрице, чтобы сделать ключевую информацию более заметной.Мы можем сделать это, используяimshowизextentПараметры для достижения этой цели:

  1. fig, ax = plt.subplots()
  2. block_data = np.random.random((5, 5)) # 生成块状数据
  3. ax.imshow(block_data, cmap='Reds', interpolation='nearest', extent=[2, 7, 2, 7])
  4. plt.colorbar()
  5. plt.title('分块热力图')
  6. plt.show()

изображение-20240204002304491

7. Тепловая карта с несколькими подграфами

В некоторых случаях нам может потребоваться отобразить несколько тепловых карт на одном графике, чтобы сравнить или представить различные аспекты данных.Это можно сделать через Matplotlib.subplotвыполнить:

  1. fig, axs = plt.subplots(1, 2, figsize=(10, 4)) # 一行两列的子图
  2. # 第一个子图
  3. axs[0].imshow(data, cmap='Blues', interpolation='nearest')
  4. axs[0].set_title('子图1')
  5. # 第二个子图
  6. axs[1].imshow(data.T, cmap='Oranges', interpolation='bicubic') # 转置数据以展示不同热力图
  7. axs[1].set_title('子图2')
  8. plt.show()

8. 3D-тепловая карта

Matplotlib также поддерживает рисование трехмерных тепловых карт, что очень полезно для отображения данных с трехмерной структурой:

  1. from mpl_toolkits.mplot3d import Axes3D
  2. fig = plt.figure(figsize=(8, 6))
  3. ax = fig.add_subplot(111, projection='3d')
  4. x, y = np.meshgrid(range(len(data)), range(len(data)))
  5. ax.plot_surface(x, y, data, cmap='viridis')
  6. ax.set_title('3D热力图')
  7. plt.show()

9. Расширенные настройки цветового сопоставления и цветовой панели.

Matplotlib позволяет дополнительно изучить расширенные настройки цветовых карт и цветовых панелей для удовлетворения более сложных потребностей. Вот пример, демонстрирующий настройку цветовой панели и добавление меток цветной панели:

  1. fig, ax = plt.subplots()
  2. im = ax.imshow(data, cmap='coolwarm', interpolation='nearest')
  3. # 自定义颜色栏
  4. cbar = plt.colorbar(im, ax=ax, fraction=0.046, pad=0.04)
  5. cbar.set_label('数据值', rotation=270, labelpad=15)
  6. plt.title('高级颜色栏设置')
  7. plt.show()

изображение-20240204002506344

10. Динамическое отображение тепловой карты.

Иногда нам нужно отображать изменения в данных динамически, что можно сделать с помощью Matplotlib.FuncAnimation выполнить. Ниже приведен простой пример динамической тепловой карты:

  1. from matplotlib.animation import FuncAnimation
  2. fig, ax = plt.subplots()
  3. data_frames = [np.random.random((10, 10)) for _ in range(10)] # 生成多帧数据
  4. def update(frame):
  5. ax.clear()
  6. im = ax.imshow(data_frames[frame], cmap='Blues', interpolation='nearest')
  7. plt.title(f'动态热力图 - 帧 {frame}')
  8. ani = FuncAnimation(fig, update, frames=len(data_frames), interval=500, repeat=False)
  9. plt.show()

11. Интерактивность тепловых карт

Чтобы сделать тепловую карту более интерактивной, вы можете использовать Matplotlib.imshowобъединитьmplcursorsБиблиотека реализует отображение точек данных при наведении:

  1. import mplcursors
  2. fig, ax = plt.subplots()
  3. im = ax.imshow(data, cmap='Greens', interpolation='nearest')
  4. mplcursors.cursor(hover=True).connect("add", lambda sel: sel.annotation.set_text(f'{sel.artist.get_array()[sel.target.index]:.2f}'))
  5. plt.title('交互式热力图')
  6. plt.show()

Таким образом, при наведении курсора мыши на точки данных тепловой карты будут отображаться соответствующие значения.

изображение-20240204002444309

12. Стандартизированный диапазон данных

Иногда, чтобы более четко показать различия в данных, нам может потребоваться нормализовать диапазон данных.Это можно сделать черезNormalizeкласс для реализации:

  1. from matplotlib.colors import Normalize
  2. normalized_data = Normalize()(data) # 将数据标准化
  3. fig, ax = plt.subplots()
  4. im = ax.imshow(normalized_data, cmap='YlGnBu', interpolation='bicubic')
  5. plt.colorbar(im, label='标准化值范围')
  6. plt.title('标准化热力图')
  7. plt.show()

13. Экспорт тепловой карты

Наконец, мы можем экспортировать нарисованную тепловую карту в виде файла изображения через Matplotlib для дальнейшего использования или обмена:

  1. fig, ax = plt.subplots()
  2. im = ax.imshow(data, cmap='coolwarm', interpolation='nearest')
  3. plt.colorbar(im)
  4. plt.title('导出热力图')
  5. plt.savefig('heatmap.png')

Выше приведена серия примеров и методов рисования различных типов крутых тепловых карт с помощью Matplotlib. Благодаря этим примерам мы получили глубокое понимание возможностей Matplotlib и того, как создавать красочные, интерактивные и расширенные тепловые карты, регулируя параметры и применяя различные методы. Надеемся, что эти примеры послужили полезным руководством для вашей работы по визуализации данных.

Подведем итог:

Во вступлении к этой статье мы подробно обсудим различные методы и настройки параметров библиотеки Matplotlib при рисовании различных типов крутых тепловых карт. Вот ключевые моменты, которые мы узнали:

  1. Базовые знания:Мы узнали об основных параметрах рисования тепловых карт в Matplotlib, таких какdatacmapinterpolationvminиvmax, эти параметры оказывают важное влияние на внешний вид и читаемость тепловой карты.

  2. Распространенные типы тепловых карт:На примерах мы обсудили методы рисования распространенных типов тепловых карт, таких как базовые тепловые карты, пользовательские цветовые карты, аннотации, тепловые карты различной формы, блочные тепловые карты, тепловые карты с несколькими подкартами, трехмерные тепловые карты и т. д.

  3. расширенные настройки:Мы узнали, как выполнять расширенные настройки цветового сопоставления и цветовых полос, а также как сделать тепловые карты более персонализированными и удобочитаемыми, настраивая метки цветных полос, динамическое отображение, интерактивность, стандартизированные диапазоны данных и другие методы.

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