Как изменить цвет гистограммы 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() отображать графики в координатных осях и делать их простое оформление.


















