Matplotlib — популярная библиотека Python, используемая для визуализации данных и построения графиков. Она предоставляет широкий спектр настраиваемых типов графиков и опций для создания информативных и эстетически привлекательных графиков. Одной из полезных функций matplotlib является возможность добавлять цветные полосы к графикам. Цветные полосы обеспечивают визуальное представление того, как цветовая карта соответствует значениям данных. Это позволяет читателям легко интерпретировать значимость цветов на графике. В этом подробном руководстве мы рассмотрим все, что вам нужно знать о настройке цветных полос на графиках matplotlib.
Цветовая полоса, также известная как легенда цветовой карты, — это визуальное средство, сопоставляющее значения данных с цветами. Она предоставляет шкалу, которая помогает читателям приравнивать цвета к количествам или интенсивностям. Цветовая полоса отображает спектр цветов, перемещающийся от одного конечного цвета, представляющего минимальные значения, к другому конечному цвету, представляющему максимальные значения. Промежуточные значения отображаются в виде переходов между конечными оттенками цветов. Это дает визуализацию цветового градиента на графике.
Например, на графике данных о высоте более низкие высоты могут быть окрашены в синий цвет, а более высокие — в желтый и красный. Соответствующая цветовая полоса будет отображать спектр от синего до красного, указывая, что синий представляет низкие высоты, а красный — высокие. Взгляд на цветовую полосу дает мгновенное представление о том, что означают различные цвета на графике. Цветовые полосы чрезвычайно полезны для интерпретации тепловых карт, контурных диаграмм, псевдоцветовых диаграмм и других типов графиков, которые используют цветовую карту для визуального кодирования значений.
Цветовые полосы предоставляют легенду для цветовой карты, используемой на графике. Они наиболее полезны, когда на графике используется непрерывное цветовое отображение для визуального представления значений данных. Например:
Если цвета на графике не сопоставлены со значениями данных, цветовая полоса может быть бесполезной. Например, в круговой диаграмме с категориальными цветами или на графике, использующем цвета просто для различения разных линий, цветовая полоса не нужна.
Базовая вертикальная цветовая полоса состоит из:
Цветовой спектр визуально связывает значения данных с цветами. Деления и метки количественно определяют эту связь. Заголовок описывает значимость цветовой полосы. Аналогичные компоненты присутствуют и в горизонтальных цветовых полосах.
Matplotlib предоставляет класс Colorbar для простого добавления цветовых полос на графики. Вот основные шаги для добавления вертикальной цветовой полосы на существующие оси matplotlib:
Это добавляет вертикальную цветовую полосу по умолчанию на график. Давайте рассмотрим пример:
“`python
import matplotlib.pyplot as plt
import numpy as np
# Создание данных
data = np.random.randn(10,10)
# Построение тепловой карты с помощью imshow с горячей цветовой картой
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='hot')
# Получение цветовой карты
cmap = im.cmap
# Создание цветовой полосы
cbar = fig.colorbar(im, cmap=cmap)
plt.show()
“`
Этот код строит тепловую карту случайных данных и добавляет к ней цветовую полосу по умолчанию. Ключевые шаги — использование цветовой карты, извлечение цветовой карты, создание цветовой шкалы, связанной с графиком изображения, и добавление ее к подграфику осей. Это можно настроить дополнительно, как обсуждается в следующих разделах.
Цветовая шкала добавляется к той же фигуре, что и график по умолчанию. Чтобы сделать цветовую полосу вертикальной, задайте параметру ориентации в Colorbar значение «vertical»:
“`python
cbar = fig.colorbar(im, cmap=cmap, orientation='vertical')
“`
Чтобы создать горизонтальную цветовую полосу под графиком, укажите ориентацию как «horizontal»:
“`python
cbar = fig.colorbar(im, cmap=cmap, orientation='horizontal')
“`
Мы можем указать расположение цветовой полосы с помощью параметра ax. Для вертикальной цветовой шкалы:
“`python
cbar = fig.colorbar(im, cmap=cmap, ax=ax, location='right') # Размещает цветовую шкалу справа от графика
“`
Для горизонтальной цветовой шкалы:
“`python
cbar = fig.colorbar(im, cmap=cmap, ax=ax, orientation='horizontal', location='bottom') # Размещает цветовую шкалу под графиком
“`
Это позволяет расположить цветовую шкалу в нужном месте на подграфике осей.
Matplotlib предлагает обширные возможности настройки цветовых шкал для создания информативных цветовых шкал, соответствующих вашим данным. Вот несколько полезных настроек.
Используйте параметр shrink для настройки толщины цветовой полосы:
“`python
cbar = fig.colorbar(im, cmap=cmap, shrink=0.6) # Меньшее значение делает цветовую полосу толще
“`
Делания и метки делений можно задать явно, передав расположение делений и метки делений в Colorbar:
“`python
ticks = [0, 2, 4, 6, 8, 10]
tick_labels = ['Min', 'Low', 'Medium', 'High', 'Max']
cbar = fig.colorbar(im, cmap=cmap, ticks=ticks, tick_labels=tick_labels)
“`
Заголовок можно добавить с помощью метода set_label():
“`python
cbar = fig.colorbar(im, cmap=cmap)
cbar.set_label('Температура (°C)')
“`
Диапазон цветовой карты можно задать с помощью аргументов vmin и vmax. Это настраивает цветовой спектр:
“`python
im = ax.imshow(data, cmap='hot', vmin=0, vmax=100)
“`
Это сопоставит значения данных от 0 до 100 с горячей цветовой картой.
Чтобы использовать логарифмическую шкалу цветовой карты, где равные шаги в данных представлены неравными шагами в цветовой карте, мы можем передать norm=LogNorm():
“`python
im = ax.imshow(data, cmap='hot', norm=LogNorm())
“`
Это сопоставляет данные логарифмически с цветовой картой.
Используйте параметр ticks в Colorbar, чтобы задать приблизительное количество тактов:
“`python
cbar = fig.colorbar(im, cmap=cmap, ticks=5) # Устанавливает ~5 делений
“`
Метки делений можно форматировать для фиксированной точности с помощью ScalarFormatter:
“`python
import matplotlib.ticker as ticker
formatter = ticker.ScalarFormatter(useMathText=True)
formatter.set_scientific(True)
formatter.set_powerlimits((-2, 2))
cbar = fig.colorbar(im, cmap=cmap)
cbar.locator = ticker.MaxNLocator(5)
cbar.formatter = formatter
cbar.update_ticks()
“`
Это форматирует метки делений в экспоненциальном представлении с 2 десятичными знаками.
Свойства шрифта, такие как размер шрифта, насыщенность, семейство, можно задать для меток делений, меток осей и заголовка:
“`python
cbar.ax.tick_params(labelsize=14)
cbar.ax.xaxis.label.set_fontweight('bold')
cbar.ax.set_title('Temperature', fontname='Times New Roman', fontsize=16)
“`
Это позволяет стилизовать шрифт в соответствии с желаемыми характеристиками.
Длину цветной полосы можно увеличить за пределы графика с помощью параметра extend:
“`python
cbar = fig.colorbar(im, cmap=cmap, extend='both')
“`
Это расширяет цветовую полосу с обоих концов, что полезно, когда значения данных выходят за пределы отображаемого диапазона.
Для графиков с несколькими осями Y мы можем связать цветовую полосу с определенной осью Y, передав соответствующий экземпляр оси:
“`python
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))
# График 1
im1 = ax1.imshow(data1, cmap='Reds')
cbar1 = fig.colorbar(im1, ax=ax1)
# График 2
im2 = ax2.imshow(data2, cmap='Blues')
cbar2 = fig.colorbar(im2, ax=ax2) # Цветовая шкала связана с ax2
“`
Это позволяет иметь независимые цветовые шкалы для каждой оси подграфика.
Вот несколько советов по эффективному использованию цветовых шкал в matplotlib:
Следуя этим рекомендациям, вы получите информативные и визуально привлекательные цветовые полосы!
Для большего контроля цветовую полосу можно создать напрямую, создав экземпляр объекта Colorbar. Это включает в себя создание осей для цветовой шкалы, нанесение на нее изображения цветовой шкалы и настройку свойств осей. Вот пример:
“`python
import matplotlib as mpl
# Создать рисунок и оси
fig = plt.figure(figsize=(6, 5))
ax = fig.add_subplot(111)
# Сгенерировать график
im = ax.imshow(data, norm=LogNorm(), cmap='coolwarm')
# Создать новые оси для цветовой шкалы
cax = fig.add_axes([0.95, 0.2, 0.03, 0.6])
# Создать цветовую шкалу
norm = mpl.colors.Normalize(vmin=data.min(), vmax=data.max())
cb = mpl.colorbar.ColorbarBase(cax, cmap=cmap, norm=norm)
# Установка положений отметок и добавление меток
cb.set_ticks([2, 4, 6, 8, 10])
cax.set_yticklabels(['Low', 'Medium', 'High'])
# Установка заголовка цветовой шкалы
cb.set_label('Colorbar Title')
plt.show()
“`
Это позволяет осуществлять детальный контроль свойств цветовой шкалы. Однако для большинства целей рекомендуется использовать простой метод fig.colorbar().
Выбор цветовой карты важен для эффективной визуализации. Matplotlib предоставляет широкий спектр встроенных цветовых карт на выбор. Вот некоторые полезные цветовые карты для числовых данных:
Они обеспечивают перцептивно однородные градиенты, подходящие для представления упорядоченных данных. Цветовые карты, такие как jet, не рекомендуются, поскольку они могут вносить визуальные артефакты. Качественные цветовые карты, такие как tab10, доступны для категориальных данных. Полный список цветовых карт можно просмотреть с помощью:
“`python
import matplotlib.pyplot as plt
plt.colormaps()
“`
Это отображает все доступные параметры цветовых карт для выбора.
Seaborn — это статистическая библиотека визуализации, созданная на основе matplotlib. Он также позволяет добавлять цветные полосы через аргумент cbar_kws:
“`python
import seaborn as sns
# Построение тепловой карты
heatmap = sns.heatmap(data, cbar_kws={'label': 'Colorbar Title'})
# Доступ к объекту цветовой полосы
cbar = heatmap.figure.get_axes()[1]
# Настройка отметок, меток и т. д. цветовой полосы
“`
Тепловая карта Seaborn обрабатывает создание цветовой полосы, возвращая оси цветовой полосы для дальнейшей настройки.
Для данных, хранящихся в Pandas DataFrames, мы можем использовать методы построения графиков DataFrame, чтобы легко создавать графики с цветовыми полосами:
“`python
import pandas as pd
df = pd.DataFrame(data)
# Построить тепловую карту
ax = df.plot.imshow(cmap='plasma')
# Добавить цветовую полосу
fig = ax.get_figure()
fig.colorbar(ax.collections[0], ax=ax)
“`
Это использует интеграцию Pandas с matplotlib для построения графиков DataFrames с цветовыми полосами.
Plotly — это еще одна библиотека Python для построения графиков, которая поддерживает добавление цветовых полос. Вот пример:
“`python
import plotly.express as px
# Create figure
fig = px.imshow(data, color_continuous_scale='Viridis')
# Update color axis
fig.update_coloraxes(colorbar_title='Colorbar Title')
fig.show()
“`
Plotly предоставляет функциональность colorbar через свойства цветовой оси.
Давайте рассмотрим несколько примеров добавления цветовых полос к различным типам графиков matplotlib:
“`python
import numpy as np
import matplotlib.pyplot as plt
data = np.random.random((10,10))
fig, ax = plt.subplots()
im = ax.imshow(data, cmap='Wistia')
cbar = fig.colorbar(im, ax=ax)
cbar.set_label('Brightness')
plt.show()
“`
Это сопоставляет случайные данные с цветами с помощью цветовой карты Wistia и добавляет цветовую полосу, представляющую яркость.
“`python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3, 3, 500)
y = np.linspace(-3, 3, 500)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 – Y**2)
fig, ax = plt.subplots()
cp = ax.contour(X, Y, Z, levels=np.logspace(-2, 0, 10))
fig.colorbar(cp, ax=ax, label='Height')
plt.show()
“`
Это создает контурный график для трехмерной поверхности exp(-x^2 – y^2) и добавляет цветовую шкалу, показывающую уровни высоты для контурных линий.
“`python
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 5, 500)
y = np.linspace(0, 5, 500)
X, Y = np.meshgrid(x, y)
Z = np.cos(X**2 + Y**2