Как построить несколько линий в matplotlib разными цветами?

Matplotlib — популярная библиотека Python, используемая для визуализации данных и построения графиков. Он предоставляет широкий спектр настраиваемых графиков и диаграмм, которые можно использовать в скриптах Python, блокнотах Jupyter и графических интерфейсах Tkinter.

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

Предварительные требования

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

  • Установленный Python 3.x
  • Установленная библиотека Matplotlib (например, pip install matplotlib)
  • Базовые знания Python и matplotlib
  • Пример данных для построения графика (в этой статье мы будем использовать некоторые фиктивные данные)

Способ 1: указание цветов в plt.plot()

Самый простой способ использовать разные цвета при построении нескольких линий — указать аргумент ключевого слова color в каждом вызове plt.plot():

import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1, color='r') plt.plot(x, y2, color='g') plt.title('Синус и косинус') plt.xlabel('x values') plt.ylabel('y values') plt.legend(['Sine', 'Cosine']) plt.show() 

Здесь мы указываем 'r' для красного и 'g' для зеленого. Это отобразит функцию синуса красным цветом, а косинуса — зеленым.

Мы можем использовать любые поддерживаемые matplotlib сокращения цветов, например:

  • 'b' — синий
  • 'g' — зеленый
  • 'r' — красный
  • 'c' — голубой
  • 'm' — пурпурный
  • 'y' — желтый
  • 'k' — черный
  • 'w' – белый

Или мы можем использовать шестнадцатеричные коды цветов, например '#FF00FF' для фиолетового.

Способ 2: Создание цветовой карты

Другой метод — определить цветовую карту, которая сопоставляет значения данных с цветами. Это позволяет раскрашивать линии на основе числового массива.

Например:

import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.1) y1 = np.sin(x) y2 = np.cos(x) colormap = np.array(['r', 'g']) plt.plot(x, y1, color=colormap[0]) plt.plot(x, y2, color=colormap[1]) plt.title('Синус и косинус') # Остальное то же самое 

Здесь мы создаем массив цветовой карты с 'r' и 'g', затем используйте индексацию для раскрашивания графиков синуса и косинуса.

Этот метод полезен, когда вам нужно построить много линий и вы хотите сохранить организованное сопоставление цветов.

Метод 3: использование объекта цветовой карты

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

import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1, color=cm.Reds(0.5)) plt.plot(x, y2, color=cm.Greens(0.5)) # Остальное то же самое 

Здесь мы импортировали модуль cm и использовали объекты цветовой карты Reds и Greens. Передавая значение от 0 до 1, мы получаем интерполированный цвет из этих цветовых карт.

Некоторые другие полезные встроенные цветовые карты:

  • см.Синий
  • см.Зеленый
  • см.Оранжевый
  • см.Фиолетовый
  • см.Серый

Это обеспечивает простой способ выбора цветовой палитры для ваших графиков.

Способ 4: Создание пользовательских цветовых карт

Вы также можете создавать пользовательские цветовые карты, определив список значений RGB:

import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import LinearSegmentedColormap x = np.arange(0, 10, 0.1) y1 = np.sin(x) y2 = np.cos(x) colors =  cmap = LinearSegmentedColormap.from_list('custom', colors, N=2) plt.plot(x, y1, color=cmap(0)) plt.plot(x, y2, color=cmap(1)) # Остальное то же самое 

Здесь мы определяем список кортежей RGB, затем создаем LinearSegmentedColormap из этого списка. Мы можем индексировать цветовую карту, чтобы получить цвета. Это позволяет вам полностью настроить цветовую палитру для ваших данных.

Метод 5: Использование стилей matplotlib

Matplotlib имеет несколько встроенных стилей построения графиков, которые поставляются с цветовыми палитрами. Мы можем использовать их для легкой раскраски линий:

import matplotlib.pyplot as plt import numpy as np plt.style.use('fivethirtyeight') x = np.arange(0, 10, 0.1) y1 = np.sin(x) y2 = np.cos(x) plt.plot(x, y1) plt.plot(x, y2) # Остальное то же самое 

Здесь мы использовали стиль 'fivethirtyeight', который применяет цветовую палитру к графикам. Вот еще несколько полезных стилей:

  • 'ggplot'
  • 'seaborn'
  • 'Solarize_Light2'
  • 'bmh'

Стили предоставляют готовые цветовые палитры, настройки шрифтов и другие элементы темы.

Способ 6: Итерация по цветовой карте

Мы можем написать цикл для автоматической итерации по цветовой карте при построении множества строки:

import matplotlib.pyplot as plt import numpy as np from matplotlib import cm x = np.arange(0, 10, 0.1) y_data = np.random.randn(5, len(x)) # 5 случайных строк cmap = cm.get_cmap('rainbow', 5) # 5 цветов из радужной цветовой карты for i in range(5): y = y_data[i] color = cmap(i) plt.plot(x, y, color=color) plt.title('5 случайных строк') # Остальное то же самое 

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

Способ 7: использование pandas и seaborn

Если ваши данные находятся в фрейме данных Pandas, вы можете использовать seaborn для удобного построения множества столбцов в виде разноцветных линий:

import pandas as pd import seaborn as sns df = pd.DataFrame(np.random.randn(30, 5), columns=['a', 'b', 'c', 'd', 'e']) sns.lineplot(data=df) plt.title('Случайный фрейм данных') plt.xlabel('Индекс') plt.ylabel('Values') 

Seaborn автоматически раскрасит каждый столбец по-разному. Он использует интеллектуальные цвета по умолчанию, но мы также можем настроить палитру.

Управление другими свойствами линии

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

# Стиль линии plt.plot(x, y, linestyle='dashed') # Ширина линии plt.plot(x, y, linewidth=3) # Альфа/прозрачность plt.plot(x, y, alpha=0.5) # Маркеры plt.plot(x, y, marker='o') # Размер маркера plt.plot(x, y, markersize=10) # Цвет маркера plt.plot(x, y, markeredgecolor='g') 

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

Управление легендой

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

# 1. Автоматически создать легенду из меток plt.plot(x, y1, label='Line 1') plt.plot(x, y2, label='Line 2') plt.legend() # 2. Вручную создать легенду plt.plot(x, y1) plt.plot(x, y2) plt.legend(['Line 1', 'Line 2']) # 3. Без легенды plt.plot(x, y1) plt.plot(x, y2) plt.legend([], []) # пустые списки 

Легенду можно дополнительно настроить с помощью таких свойств, как местоположение, размер шрифта, цвет и т. д.

Сохранение графика в файл

После создания желаемого многолинейного графика мы можем сохранить его в файл изображения с использованием plt.savefig():

# Сохранить рисунок plt.savefig('plot.png') # Указать dpi plt.savefig('plot.png', dpi=300) # Сохранить только часть внутри осей plt.savefig('plot.png', bbox_inches='tight') 

Некоторые распространенные форматы файлов: .png, .jpg, .svg, .pdf. Параметр dpi управляет разрешением.

Краткое изложение методологии построения графиков

Вот краткое изложение общего процесса построения графиков с несколькими линиями разных цветов в matplotlib:

  1. Импортируйте matplotlib и numpy
  2. Подготовьте данные x и y для построения графика
  3. Выберите цветовую палитру (отдельные цвета, цветовую карту и т. д.)
  4. Постройте каждую линию с помощью plt.plot(), указав цвет
  5. Настройте свойства линии, такие как ширина, стиль, прозрачность
  6. Добавьте легенду для идентификации линий
  7. Настройте метки графика, пределы и т. д.
  8. Сохраните рисунок в файл (необязательно)
  9. Покажите график

Заключение

В этой статье мы рассмотрели различные методы построения графиков нескольких линий с использованием разных цветов в matplotlib. Некоторые основные выводы:

  • Используйте аргументы цвета и метки в plt.plot() для простых случаев
  • Создавайте цветовые карты для более организованной раскраски из данных
  • Используйте встроенные цветовые карты, такие как cm.Blues, и стили, такие как 'ggplot'
  • Выполняйте итерации по цветовым картам при построении множества линий
  • Используйте seaborn для быстрой визуализации из фреймов данных
  • Настраивайте свойства линий, такие как ширина, прозрачность, маркеры
  • Добавьте легенды для идентификации каждой линии

Matplotlib предоставляет гибкий API для различных потребностей в построении графиков. Ключ в том, чтобы выйти за рамки базовых однолинейных графиков и использовать цветовые карты, итераторы, стили для создания информативных многолинейных визуализаций.