Перейти к содержимому

Как поменять цвет графика в matplotlib

  • автор:

Как изменить цвет гистограммы Matplotlib (с примерами)

Как изменить цвет гистограммы Matplotlib (с примерами)

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

plt.hist (data, color = " lightblue", ec=" red ") 
  • data : имя данных, которые будут использоваться для гистограммы.
  • color : цвет заливки столбцов гистограммы.
  • ec : цвет края столбцов гистограммы.

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: изменение цвета гистограммы Matplotlib

Предположим, у нас есть следующий список значений:

#define list of data data = [2, 4, 4, 5, 6, 6, 7, 8, 9, 9, 9, 10, 12, 12, 14] 

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

import matplotlib.pyplot as plt #create histogram plt.hist (data) 

По умолчанию Matplotlib создает гистограмму с темно-синим цветом заливки и без цвета края.

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

import matplotlib.pyplot as plt #create histogram with light blue fill color and red edge color plt.hist (data, color = " lightblue", ec=" red ") 

Новая гистограмма имеет голубой цвет заливки и красный цвет края.

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

import matplotlib.pyplot as plt #create histogram plt.hist (data, color = " lightblue", ec=" red", lw= 5 ) 

Чем больше значение, которое вы используете для lw , тем толще будут края полос.

Примечание : Вы можете найти полную документацию для функции Matplotlib hist здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:

Как изменить фон графика в Matplotlib

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

В этом уроке мы рассмотрим, как изменить фон графика в Matplotlib.

Импорт данных и библиотек

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

import matplotlib.pyplot as plt import pandas as pd 

В частности, мы будем использовать набор данных погоды Сиэтла:

weather_data = pd.read_csv("seattleWeather.csv") print(weather_data.head()) 
 DATE PRCP TMAX TMIN RAIN 0 1948-01-01 0.47 51 42 True 1 1948-01-02 0.59 45 36 True 2 1948-01-03 0.42 45 35 True 3 1948-01-04 0.31 45 34 True 4 1948-01-05 0.17 45 32 True 

Создание сюжета

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

PRCP = weather_data['PRCP'] TMAX = weather_data['TMAX'] TMIN = weather_data['TMIN'] 

Теперь мы построим диаграмму рассеяния между минимальной температурой и осадками, используя PyPlot Matplotlib:

plt.scatter(TMIN, PRCP) plt.show() 

График, который мы построили, можно интерпретировать, но он выглядит немного простым. Попробуем настроить его. Мы хотим настроить фон нашего сюжета, используя несколько разных методов.

Изменить фон графика в Matplotlib

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

Изменить фон осей в Matplotlib

Давайте сначала изменим цвет фона. Это можно сделать либо с помощью функции set() , передав аргумент face и его новое значение, либо с помощью специальной функции set_facecolor() :

ax = plt.axes() ax.set_facecolor("orange") # OR ax.set(facecolor = "orange") plt.scatter(TMIN, PRCP) plt.show() 

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

Изменить фон рисунка в Matplotlib

Если вы хотите установить фон для фигуры и чтобы оси были прозрачными, это можно сделать с помощью аргумента set_alpha() при создании фигуры. Создадим фигуру и объект оси. Конечно, вы также можете использовать функцию set() и alpha вместо этого передать атрибут.

Цвет всей фигуры будет синим, и мы изначально установим alpha для объекта осей значение 1.0 , что означает полную непрозрачность. Мы окрашиваем объект оси в оранжевый цвет, давая нам оранжевый фон внутри синей фигуры:

fig = plt.figure() fig.patch.set_facecolor('blue') fig.patch.set_alpha(0.6) ax = fig.add_subplot(111) ax.patch.set_facecolor('orange') ax.patch.set_alpha(1.0) plt.scatter(TMIN, PRCP) plt.show() 

Теперь посмотрим, что произойдет, если мы уменьшим альфа-канал подзаголовка осей до 0.0 :

fig = plt.figure() fig.patch.set_facecolor('blue') fig.patch.set_alpha(0.6) ax = fig.add_subplot(111) ax.patch.set_facecolor('orange') ax.patch.set_alpha(0.0) plt.scatter(TMIN, PRCP) plt.show() 

Обратите внимание, что фон самого сюжета теперь прозрачен.

Добавить изображение на фон графика в Matplotlib

Если вы хотите использовать изображение в качестве фона для сюжета, это можно сделать с помощью функции imread() PyPlot. Эта функция загружает изображение в Matplotlib, которое можно отобразить с помощью функции imshow() .

Для печати поверх изображения необходимо указать размер изображения. По умолчанию Matplotlib использует левый верхний угол изображения в качестве источника изображения. Мы можем передать функции список точек imshow() , указав, какая область изображения должна отображаться. В сочетании с дополнительными сюжетами поверх изображения можно вставить еще один график.

Давайте используем изображение дождя в качестве фона для нашего сюжета:

img = plt.imread("rain.jpg") fig, ax = plt.subplots() ax.imshow(img, extent=[-5, 80, -5, 30]) ax.scatter(TMIN, PRCP, color="#ebb734") plt.show() 

Аргумент extent принимает дополнительные аргументы в следующем порядке: horizontal_min , horizontal_max , vertical_min , vertical_max .

Цвета линий в Matplolib

введите сюда описание изображения

но цвета линий всегда одинаковые, если я разделяю plt.plot(An[-1], U[-1]) на два, то вид графика меняется. Как можно сделать два разных цвета для двух линий в одном plt.plot() Выходит вот такой график А мне нужно чтобы эти линии были разных цветов Если я их делю вот так:

plt.xlabel('Length') plt.ylabel('Time') plt.axis([length_h[0], length_h[-1], time_tau[0], time_tau[-1]]) plt.plot(An[-1], 'r') plt.plot(U[-1], 'b') plt.grid() plt.show() 

введите сюда описание изображения

То график выглядеть начинает по-другому:

введите сюда описание изображения

введите сюда описание изображения

Отслеживать

149k 12 12 золотых знаков 59 59 серебряных знаков 132 132 бронзовых знака

Функция plot для построения и оформления двумерных графиков

Начнем изучение пакета matplotlib с наиболее часто используемой функции plot(). На предыдущем занятии мы с ее помощью построили простой двумерный график:

import matplotlib.pyplot as plt plt.plot([1, 2, -6, 0, 4]) plt.show()

Также обратите внимание, что мы обращаемся к ветке matplotlib.pyplot для вызова этой функции. В целом, именно модуль pyplot отвечает за отображение разных графиков – это «рабочая лошадка» пакета matplotlib.

Давайте первым делом разберемся, что на вход принимает эта функция и что она, фактически, делает. В нашей программе мы передаем ей обычный список языка Python. В действительности же, все входные данные должны соответствовать массивам пакета numpy, то есть, иметь тип:

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

import numpy as np y = np.array([1, 2, -6, 0, 4])

А, затем, передать его функции plot():

plt.plot(y)

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

Итак, указывая всего один аргумент в функции plot() он интерпретируется как множество точек по ординате (координате Oy). Соответственно, координата x формируется автоматически как индексы элементов массива y:

Но мы можем значения по абсциссе указывать и самостоятельно, например, так:

x = np.array([4, 5, 6, 7, 8]) y = np.array([1, 2, -6, 0, 4]) plt.plot(x, y)

Теперь значения по оси Ox будут лежать в диапазоне от 4 до 8. Причем, функция plot() при отображении этих данных делает одну простую вещь – она соединяет прямыми линиями точки с указанными координатами:

Но это значит, если указать точки в узлах квадрата, то будет нарисован квадрат на плоскости? Давайте проверим. Запишем следующие координаты:

x = np.array([1, 1, 5, 5, 1]) y = np.array([1, 5, 5, 1, 1]) plt.plot(x, y)

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

y = np.arange(0, 5, 1) # [0, 1, 2, 3, 4] x = np.array([a*a for a in y]) # [ 0, 1, 4, 9, 16] plt.plot(x, y)

В результате, мы увидим не прямую линию, а изогнутую:

Вот так гибко и интуитивно понятно обрабатывает функция plot() входные данные.

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

plt.grid()

Далее, если нам нужно в этих же осях отобразить еще один график, то это можно сделать так:

y = np.arange(0, 5, 1) x = np.array([a*a for a in y]) y2 = [0, 1, 2, 3] x2 = [i+1 for i in y2] plt.plot(x, y, x2, y2)

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

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

Соответственно, указывая следующие пары в функции plot(), будут отображаться все новые и новые графики в текущих координатах. Но можно сделать и по-другому. Вызвать функцию plot() несколько раз подряд, например:

plt.plot(x, y) plt.plot(x2, y2)

Получим аналогичный эффект – два графика в одних координатах. Такая реализация возможна благодаря объектно-ориентированной архитектуре пакета matplotlib. Здесь координатные оси – это объект Axes. Соответственно, вызывая функцию plot() снова и снова, в этот объект помещают новые и новые данные для каждого отдельного графика:

  • Figure – объект для отображения всех данных, связанных с графиком;
  • Axes – двумерная координатная ось декартовой системы.

Изменение стилей линий у графиков

Если третьим параметром в plot() указать строку с двумя дефисами:

plt.plot(x, y, '--')

то график будет изображен не сплошной линией, а штрихами. Какие еще варианты типа линий возможны? Они приведены в следующей таблице:

Обозначение типа линии Описание
‘-‘ Непрерывная линия (используется по умолчанию)
‘—‘ Штриховая линия
‘-.’ Штрихпунктирная линия
‘:’ Пунктирная линия
‘None’ или ‘ ‘ Без рисования линии

Например, для второго графика мы можем указать пунктирную линию:

plt.plot(x2, y2, ':')

Функция plot возвращает список на объекты Line2D. Если записать вызов в виде:

lines = plt.plot(x, y, '--') print(lines)

то в консоли увидим список из одного объекта, так как функция отображает один график. Через этот объект можно непосредственно управлять графиком, например, поменять тип линии:

plt.setp(lines, linestyle='-.')

Здесь используется еще одна функция setp() для настройки свойств объектов, в данном случае линейного графика. Если же мы отобразим два графика одной функцией plot():

lines = plt.plot(x, y, '--', x2, y2, ':')

то коллекция lines будет содержать два объекта Line2D. Далее, назначим им стиль:

plt.setp(lines, linestyle='-.')

Теперь они оба будут отображены штрихпунктирной линией.

Изменение цвета линий графиков

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

p align=center>{'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'}

Цвет можно понять по английскому названию указанной первой буквы. Например, b = blue, r = red, g = green, c = cyan, w = white, и т.д. Давайте изменим цвет у наших графиков, указав символы g и m:

lines = plt.plot(x, y, '--g', x2, y2, ':m')

Как видите, все предельно просто. Или же можно использовать именованный параметр color (или просто букву c) для более точной настройки цвета:

lines = plt.plot(x, y, '--g', x2, y2, ':m', color='r')

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

lines = plt.plot(x, y, '--g', x2, y2, ':m', color='#0000CC')

Или в виде кортежей формата: RGB и RGBA

lines = plt.plot(x, y, '--g', x2, y2, ':m', color=(0, 0, 0)) lines = plt.plot(x, y, '--g', x2, y2, ':m', c=(0, 0, 0, 0.5))

В последней строчке использовано второе имя параметра color. Это основные способы задания цветов. Причем, не только для типов линий графиков, но и при работе с другими объектами пакета matplotlib. Так что эта информация в дальнейшем нам еще пригодится.

Изменение маркеров точек у графиков

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

plt.plot(x2, y2, ':o')

отображает график с круглыми точками: Какие типы маркеров еще могут быть? Они перечислены в таблице ниже:

Обозначение Описание маркера
‘o’
‘v’
‘^’

‘>’
‘2’
‘3’
‘4’
‘s’
‘p’
‘*’
‘h’
‘H’
‘+’
‘x’
‘D’
‘d’
‘|’
‘_’

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

lines = plt.plot(x, y, '-go', x2, y2, 's:m')

отобразится следующий график: Другой способ определения маркера – использование параметра marker:

lines = plt.plot(x, y, '-go', x2, y2, 's:m', marker='d')

В этом случае для обоих графиков будет присвоен один и тот же маркер типа ‘d’. Для задания цвета маркера, отличного от цвета линии, применяется параметр markerfacecolor:

lines = plt.plot(x, y, '-go', x2, y2, 's:m', marker='d', markerfacecolor='w')

Здесь мы выбрали белый цвет заливки и графики теперь выглядят так:

Именованные параметры функций setp() и plot()

Все эти же действия по оформлению графика можно выполнять и с помощью функции setp(). Например, записав следующую строчку:

plt.setp(lines[0], linestyle='-.', marker='s', markerfacecolor='b', linewidth=4)

получим отображение графика штрихпунктирной линией, квадратным маркером с синей заливкой и толщиной линии, равной 4 пиксела. Какие еще именованные параметры есть у функций setp() и plot()? В таблице ниже я привел основные из них:

Параметр Описание
alpha Степень прозрачности графика (значение от 0 до 1)
color или c Цвет линии
dash_capstyle Стиль штриховых конечных точек [‘butt’ | ’round’ | ‘projecting’]
dash_joinstyle Стиль штриховых соединительных точек [‘miter’ | ’round’ | ‘bevel’]
data Данные графика в формате (x, y), где x, y – массивы numpy
linestyle или ls Стиль линии [ ‘-‘ | ‘—‘ | ‘-.’ | ‘:’ | ‘steps’ | . ]
linewidth или lw Толщина линии (вещественное число)
marker Маркер точек
markeredgecolor или mec Цвет границ маркеров
markeredgewidth или mew Толщина границы маркеров (вещественное число)
markerfacecolor или mfc Цвет заливки маркеров
markersize или ms Размер маркеров
solid_capstyle Стиль конечных точек непрерывной линии [‘butt’ | ’round’ | ‘projecting’]
solid_joinstyle Стиль соединительных точек непрерывной линии [‘miter’ | ’round’ | ‘bevel’]
visible Показать/скрыть график [True | False]
xdata Значения для оси абсцисс (массив numpy)
ydata Значения для оси ординат (массив numpy)

Более подробную информацию о параметрах для оформления графиков смотрите в документации по matplotlib.

Заливка областей графика

  • x, y1 – массивы значений координат x и функции y1;
  • y2 – массив (или число) для второй кривой, до которой производится заливка;
  • where – массив булевых элементов, который определяет области для заливки.
x = np.arange(-2*np.pi, 2*np.pi, 0.1) y = np.cos(x) plt.plot(x, y) plt.fill_between(x, y) plt.show()

У нас получилась косинусоида с заливкой между значениями функции y и осью абсцисс y2 = 0. Если третьим параметром указать другое число, отличное от нуля, например, 0,5:

plt.fill_between(x, y, 0.5)

то получим следующий эффект: А если дополнительно еще сделать ограничение на выбор заливаемого региона, когда y < 0:

plt.fill_between(x, y, 0.5, where=(y  0))

то получим такую картину: Также можно вызвать эту функцию два раза подряд:

plt.fill_between(x, y, where=(y  0), color='r', alpha=0.5) plt.fill_between(x, y, where=(y > 0), color='g', alpha=0.5)

и сформировать следующее оформление графика косинусоиды: Вот так можно с помощью функции plot() отображать графики в координатных осях и делать их простое оформление.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *