Matplotlib — популярная библиотека Python, используемая для визуализации данных и построения графиков. Он предоставляет широкий спектр настраиваемых графиков и диаграмм, которые можно использовать в скриптах Python, блокнотах Jupyter и графических интерфейсах Tkinter.
Обычной задачей при использовании matplotlib является построение нескольких линий на одном графике, при этом каждая линия имеет свой цвет. Это позволяет визуализировать и сравнивать несколько наборов данных на одном графике. В этой статье мы рассмотрим несколько методов построения нескольких линий с использованием разных цветов с помощью matplotlib.
Прежде чем погрузиться в код, давайте рассмотрим некоторые предварительные требования:
pip install matplotlib)Самый простой способ использовать разные цвета при построении нескольких линий — указать аргумент ключевого слова 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 сокращения цветов, например:
Или мы можем использовать шестнадцатеричные коды цветов, например '#FF00FF' для фиолетового.
Другой метод — определить цветовую карту, которая сопоставляет значения данных с цветами. Это позволяет раскрашивать линии на основе числового массива.
Например:
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', затем используйте индексацию для раскрашивания графиков синуса и косинуса.
Этот метод полезен, когда вам нужно построить много линий и вы хотите сохранить организованное сопоставление цветов.
В 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, мы получаем интерполированный цвет из этих цветовых карт.
Некоторые другие полезные встроенные цветовые карты:
Это обеспечивает простой способ выбора цветовой палитры для ваших графиков.
Вы также можете создавать пользовательские цветовые карты, определив список значений 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 из этого списка. Мы можем индексировать цветовую карту, чтобы получить цвета. Это позволяет вам полностью настроить цветовую палитру для ваших данных.
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', который применяет цветовую палитру к графикам. Вот еще несколько полезных стилей:
Стили предоставляют готовые цветовые палитры, настройки шрифтов и другие элементы темы.
Мы можем написать цикл для автоматической итерации по цветовой карте при построении множества строки:
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 случайных наборов данных, затем выполнили цикл и построили каждый из них, используя другой цвет из радужной цветовой карты. Это обеспечивает простой способ построения множества линий из цветовой карты.
Если ваши данные находятся в фрейме данных 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:
В этой статье мы рассмотрели различные методы построения графиков нескольких линий с использованием разных цветов в matplotlib. Некоторые основные выводы:
Matplotlib предоставляет гибкий API для различных потребностей в построении графиков. Ключ в том, чтобы выйти за рамки базовых однолинейных графиков и использовать цветовые карты, итераторы, стили для создания информативных многолинейных визуализаций.