Введение в Matplotlib

Визуализация данных Python с помощью Matplotlib - Часть 1

Завершенные учебные пособия по Matplotlib для построения графиков Python от базового до продвинутого, с более чем 100 примерами

Визуализация данных направлена ​​на представление данных в более простом представлении, таком как диаграмма рассеяния, диаграмма плотности, гистограмма и т. Д. Также полезно дать читателям или аналитикам общую картину своих данных. Визуализируя свои данные, вы можете обнаруживать потенциальные выбросы. В Python вы можете использовать различные модули или библиотеки для визуализации данных. Один из основных модулей - Matplotlib. Вы можете визуализировать данные с помощью Matplotlib в различных стилях построения. Но Matplotlib не может показать вам график динамики. Если вы хотите создать потрясающий динамичный сюжет, вы можете использовать Dash из plotly (я надеюсь закончить рассказ о полном туториале с Dash в следующем месяце).

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

Как я уже упоминал ранее, я проведу вас через создание 90 различных сюжетных примеров. Примеры распределены в 11 различных стилях графиков: точечная диаграмма, линейная диаграмма, гистограмма 1D, 2D, граничная диаграмма, гистограмма, прямоугольная диаграмма, скрипичная диаграмма, круговая диаграмма, полярная диаграмма, географическая проекция, 3D-диаграмма и контурная диаграмма. Вы можете увидеть рисунок 1, чтобы получить общее представление об этой истории.

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

В начале написания этого рассказа я планирую написать только 1 рассказ. Но, думаю, мне нужно разделить его на несколько частей из-за времени чтения. Если я напишу все в одном рассказе, это будет стоить больше 40 минут. Думаю, вам будет скучно читать все это в одном рассказе :). Итак, я делю его на 2 или 3 части. Я ограничу время чтения менее 30 минутами. Это первая часть. Приступим.

Введение в Matplotlib

Чтобы установить Matplotlib, вы можете установить его через pip с этим кодом

pip install matplotlib

или через conda

conda install -c anaconda matplotlib

Когда я писал эту историю, я установил Matplotlib версии 3.3.2. Вы можете проверить это, написав этот код.

pip show matplotlib

Если вы хотите проверить это в Jupyter Notebook (далее Jupyter), вы можете добавить! перед pip, как показано на рисунке 2.

Если вы хотите обновить версию Matplotlib, вы можете использовать следующий код

pip install matplotlib --upgrade

Опять же можно добавить! перед pip для обновления Matplotlib через Jupyter.

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

Прежде чем мы перейдем к первому разделу, я должен сообщить вам, что я настроил свой стиль построения Matplotlib, такой как использование шрифта LaTeX по умолчанию, изменение размера и семейства шрифтов, изменение направления и размера xtick и ytick и добавление незначительной отметки в ось x и ось y. Чтобы использовать шрифт LaTeX в качестве шрифта по умолчанию в Matplotlib, вы можете использовать этот код

plt.rcParams['text.usetex'] = True

Если вы столкнулись с ошибками, вам необходимо прочитать следующий рассказ. Я объяснил подробные процедуры работы со шрифтом LaTeX в Matplotlib.



Чтобы настроить другие параметры (размер шрифта, семейство шрифтов и параметры галочки), вы просто пишете этот код в начале вашего кода.

plt.rcParams['font.size'] = 15
plt.rcParams['font.family'] = "serif"
tdir = 'in'
major = 5.0
minor = 3.0
plt.rcParams['xtick.direction'] = tdir
plt.rcParams['ytick.direction'] = tdir
plt.rcParams['xtick.major.size'] = major
plt.rcParams['xtick.minor.size'] = minor
plt.rcParams['ytick.major.size'] = major
plt.rcParams['ytick.minor.size'] = minor

Если вам нужно разобраться в этом более подробно, вы можете посетить этот рассказ



01. Точечная диаграмма

В этом разделе есть восемь примеров диаграмм рассеяния. Перед созданием диаграммы рассеяния мне нужно сгенерировать фиктивные данные с помощью этого кода.

import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.linspace(0., 10., N)
y = np.sin(x)**2 + np.cos(x)

Переменная x представляет собой массив из 50 данных от 0 до 10. Переменная y представляет собой сумму квадрата sin (x) и cos (x). Я хочу визуализировать переменную x по оси x и переменную y по оси y в виде диаграммы рассеяния, используя этот код

plt.figure()
plt.scatter(x, y)

Это так просто. Код покажет вам результат, как показано на рисунке 3.

Чтобы сделать его красивее, вы можете уменьшить размер каждого данных и дать метку с помощью этого кода

plt.scatter(x, y, s = 15, label = r'$y  = sin^2(x) + cos(x)$')

Чтобы изменить цвет, вам нужно добавить этот аргумент в синтаксис разброса

color = 'r' # r means red

Если вы хотите, чтобы масштаб оси был одинаковым, вы можете использовать этот код

plt.axis('equal')

Чтобы создать метку оси для осей x и y, вы можете добавить следующий код

plt.xlabel(r'$x$ (rad)')
plt.ylabel(r'$y$')

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

plt.legend()

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

plt.savefig('scatter2.png', dpi = 300, bbox_inches = 'tight', facecolor='w')

Приведенный выше код сохранит ваш график с именем scatter2.png, разрешением 300 точек на дюйм, плотным bbox и белым фоном. Это нормально, если вы не указали аргументы bbox_inches и цвета лица, но, возможно, вы получите другой результат. Просто попробуйте.

Вот полный код

Код создаст диаграмму рассеяния, как показано на рисунке 4.

Вы можете видеть, что направление галочки по оси x и оси y внутри осей, а шрифт используется в формате LaTeX. Если вы хотите изменить размер фигуры, вы можете добавить аргументы размера фигуры внутри plt.figure ()

plt.figure(figsize=(7, 4.5))

Изменить стиль маркера

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

marker = 'x'

На рисунке 5 показан результат, если вы примените приведенный выше код.

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



Если вы прочитали приведенную выше документацию, вы поймете, что можете использовать алфавит в качестве стиля маркера. Я покажу вам пример применения алфавита в качестве маркера, как показано на рисунке 6.

Чтобы создать рисунок 6, я создаю другую функцию для параметра по осям x и y. Вот код для его создания

np.random.seed(100)
N = 50
randx = np.random.random(N) * 100
randy = np.random.random(N) * 100

Чтобы визуализировать переменные randx и randy, я запускаю этот код

plt.figure(figsize=(7, 6))
plt.scatter(randx, randy, marker=r'$\beta$', s = 150, color = 'darkorange')
plt.axis('equal')
plt.xlabel('randx')
plt.ylabel('randy')
plt.tight_layout()

В качестве стиля маркера я использую бета-версию греческих символов. Вы можете изменить его, используя другой алфавит, например a, B, C, d, или 1, 2, 3, и т. д.

Настройка размера для каждых данных

В этом подразделе будет показано, как создать диаграмму рассеяния с разными размерами для каждых данных, как показано на рисунке 7.

Чтобы создать его, я генерирую случайную позицию для переменных randx и randy от 0 до 100, используя этот код

np.random.seed(100)
N = 30
randx = np.random.random(N) * 100
randy = np.random.random(N) * 100

Напоминаем, что я генерирую случайные данные с помощью Numpy. При генерации случайного числа Numpy генерирует его только в диапазоне от 0 до 1. Насколько я знаю, это соглашение о генерации случайного числа (не только в Numpy), только от 0 до 1. Чтобы изменить его, вы можете умножьте его на 100. Таким образом, вы получите случайное число в диапазоне от 0 до 100.

После этого я генерирую случайный целочисленный размер для каждых данных от 50 до 200, используя этот код.

size = np.random.randint(50, 200, size=N)

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

plt.scatter(randx, randy, s = size, color = 'darkorange')

Дополнительный синтаксис при создании рисунка 7 - это вставка второстепенного деления по осям x и y. Чтобы вставить его, вам нужно импортировать подмодуль MultipleLocator, используя этот код

from matplotlib.ticker import MultipleLocator

После этого вы можете добавить этот синтаксис для вставки малой оси

ax = plt.gca()
ax.xaxis.set_minor_locator(MultipleLocator(10))
ax.yaxis.set_minor_locator(MultipleLocator(10))

Вот полный код для создания рисунка 7.

Точечная диаграмма с цветовой кодировкой

Вы можете изменить цвет, используя палитру. Это означает, что данные разного размера будут обозначены другим цветом. Вы можете добавить аргументы цвета в plt.scatter () следующим образом

c = size

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

plt.colorbar()

Вы получите график, показанный на рисунке 8.

Вот полный код для создания рисунка 8.

Настройка цветовых карт

Вы можете изменить цветовые карты, используя этот аргумент

cmap = 'inferno'

Вы можете проверить эту ссылку, чтобы понять все цветовые карты, предоставляемые Matplotlib.



В этом уроке я создал свои собственные палитры, объединив палитры Блюз и Оранжевый, как показано на рисунке 9.

Чтобы совместить это, я использую этот код

from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
top = cm.get_cmap('Oranges_r', 128)
bottom = cm.get_cmap('Blues', 128)
newcolors = np.vstack((top(np.linspace(0, 1, 128)),
                       bottom(np.linspace(0, 1, 128))))
orange_blue = ListedColormap(newcolors, name='OrangeBlue')

Я создаю свои собственные палитры под названием orange_blue. Чтобы понять, как создавать и настраивать свои собственные палитры в Matplotlib, вы можете прочитать их по следующей ссылке



Чтобы применить его, я просто меняю аргументы цвета c = orange_blue. Вы можете проверить результат на рисунке 11.

Вот полный код для создания рисунка 11.

Это конец этого раздела, создание диаграммы рассеяния с помощью Matplotlib. Если вы столкнулись с ошибками, вы можете оставить комментарий в столбцах ответа.

02. Линейный сюжет

Чтобы построить линейный график в Matplotlib, я сгенерирую фиктивные данные с помощью этого кода.

N = 50
x = np.linspace(0., 10., N)
y = np.sin(x)**2 + np.cos(x)

Чтобы визуализировать переменные x и y в виде линейного графика, вам нужно использовать следующий простой код

plt.plot(x, y)

Приведенный выше код сгенерирует фигуру, как показано на рисунке 12.

Настройка стилей линий

Вы можете изменить стиль линии линейного графика в Matplotlib, используя этот аргумент

linestyle = '-'

Приведенный выше аргумент следует вставить в синтаксис plt.plot (). В этом уроке я покажу вам четыре разных стиля линий; они есть

['-', '--', '-.', ':']

Чтобы сгенерировать его автоматически, я использую цикл, чтобы упростить его. Вот полный код

Я распределю 4 разных стиля линий на одной фигуре. Это означает, что мне нужно создать 4 оси на фигуре. В Matplotlib вы можете сгенерировать его, настроив подзаголовки с помощью GridSpec (), subplot () и add_subplot (). В этом сеансе я использую синтаксис GridSpec (). Я создаю 4 оси (2 строки и 2 столбца) с шириной и высотой, равной 0,25 (см. Строки с 6 по 12). Как я уже упоминал в начале, я сосредоточусь только на настройке графиков. Если вам нужно больше объяснений по настройке подзаголовков в Matplotlib, вы можете посетить эту ссылку



Если вы запустите приведенный выше код, он создаст фигуру, как показано на рисунке 13.

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



Настройка ширины линии

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

lw = 2.0

Я представляю вам 4 линии различной ширины, как показано на рисунке 14.

Я использую аналогичную технику для создания рисунка 14. Вот полный код.

Создание отметки каждые

Этот подраздел поможет вам создать отметку для каждой функции. Чтобы понять это, я сначала покажу результат, как показано на рисунке 15.

На рисунке 15 я помечаю кружок для каждых 5 данных. Вы можете создать это с помощью этого аргумента

'o'            # shape for each 5 data
markevery = 5  # mark every 
ms = 7         # size of the circle in mark every

Вот полный код

Аргумент «о» нужно поставить на третью позицию.

Изменение цвета линии

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

color = 'royalblue'

Я хочу показать вам, как создать 4 разных цвета и 4 разных метки с помощью цикла, как показано на рисунке 16.

Вы можете воспроизвести рисунок 16 с помощью этого кода.

4 разных цвета, которые я использовал, подходят для дальтоников. Я понял это по этой ссылке. Чтобы понять, как с помощью этой ссылки создавать палитры для дальтоников, прочтите эту историю.

Вставка ошибки в линейный график

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

np.random.seed(100)
noise_x = np.random.random(N) * .2 + .1
noise_y = np.random.random(N) * .7 + .4

Код будет генерировать случайные числа от 0,1 до 0,3 для noise_x и от 0,3 до 0,7 для noise_y. Чтобы вставить полосу ошибок для оси Y, вы можете использовать этот код

plt.errorbar(x, y, yerr = noise_y)

На рисунке 17 показан пример полосы ошибок на линейном графике.

Вы можете создать рисунок 17 с помощью этого кода.

Чтобы вставить полосу ошибок по оси x, вы можете использовать этот аргумент

xerr = noise_x

Вы можете увидеть пример вставки полосы ошибок по осям x и y на рисунке 18.

Вы можете использовать этот код для воспроизведения рисунка 18.

Если вы хотите визуализировать свои данные без линейного графика, только с полосой ошибок, вы можете использовать этот аргумент

fmt = 'o'    # shape of the data point
color = 'r'  # color of the data point
ecolor ='k'   # color of the error bar

Вот полный код

Приведенный выше код покажет график, как показано на рисунке 19.

Заполнение области ошибки

Чтобы визуализировать ошибку, вы также можете использовать этот код

plt.fill_between(x, y + noise, y - noise, alpha = .5)

Аргументы fill_between - это данные для оси x, верхнего и нижнего пределов заполненной области. В приведенном выше коде он представлен y + noise и y-noise. Вам нужно понизить прозрачность залитой области. Вот полный код

Если вы запустите приведенный выше код, вы получите результат, как показано на рисунке 20.

Вставка вертикальных и горизонтальных линий

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

plt.hlines(0, xmin = 0, xmax = 10)
plt.vlines(2, ymin = -3, ymax = 3)

Вам нужно определить горизонтальные линии в первом аргументе, а затем начальную и конечную точки горизонтальной линии. Для вертикальной линии аргументы аналогичны.

На рисунке 21 показан пример вставки горизонтальной и вертикальной линий.

Чтобы сгенерировать рисунок 21, вы можете использовать этот код

На рисунке 21 легенда размещена за пределами осей. Вы можете реализовать это в строке 17.

Заливка между двумя вертикальными линиями

Этот подраздел поможет вам создать заполненную область между двумя вертикальными линиями, как показано на рисунке 22.

Чтобы воспроизвести рисунок 22, вы можете использовать этот код

Вам нужно знать важную вещь при создании заполненной области в Matplotlib, вам нужно установить подходящий предел оси Y.

03. Гистограмма

В этом разделе объясняется, как построить гистограмму в 1D и 2D. Сначала я расскажу вам об одномерной гистограмме. Прежде чем визуализировать одномерную гистограмму, я создам имитацию данных, нормального распределенного случайного числа, используя этот код.

N = 1000
np.random.seed(10021)
x = np.random.randn(N) * 2 + 15

По умолчанию Numpy будет генерировать нормальное распределенное случайное число со средним / медианным значением (mu), равным 0, и дисперсией (sigma), равной 1. В приведенном выше коде я меняю mu на 15 и sigma на 2. Чтобы визуализировать переменную x на 1D гистограмме. , вы можете использовать этот код

plt.hist(x)

Код покажет цифру, как показано на рисунке 23.

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

bins = 40

Аргумент сгенерирует одномерную гистограмму с 40 ячейками, как показано на рисунке 24.

Вот полный код для создания рисунка 24.

N = 1000
np.random.seed(10021)
x = np.random.randn(N) * 2 + 15
plt.figure(figsize=(9, 6))
plt.hist(x, bins = 40, label = r'$\mu = 15, \sigma = 2$')
plt.legend()

Вы также можете ограничить диапазон гистограммы, используя этот аргумент

range = (12, 18)

Аргумент позволит гистограмме отображать только данные от 12 до 18, как показано на рисунке 25.

Вы можете воспроизвести рисунок 25 с помощью этого кода.

Я также меняю цвет гистограммы с помощью аргумента color.

Горизонтальная гистограмма

Вы можете создать горизонтальную гистограмму, как показано на рисунке 26.

Вам нужно использовать этот аргумент для создания горизонтальной гистограммы

orientation = 'horizontal'

Чтобы создать рисунок 25, вы можете запустить этот код.

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

edgecolor = 'k'

Я хочу сделать границу гистограммы черным цветом, как показано на рисунке 26.

Чтобы сгенерировать рисунок 26, вы можете использовать этот полный код.

Перекрывающаяся гистограмма

Вы можете отобразить множество гистограмм на одном рисунке, как показано на рисунке 27.

На рисунке 27 я генерирую три нормальных распределения с разными mu и sigma. Вы можете воспроизвести рисунок 27 с помощью этого кода.

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

Если вам нужен полный код для создания рисунка 28, вы можете прочитать приведенный ниже код. Отличие от предыдущего кода только в аргументе альфа.

Вы также можете сгенерировать рисунок 28, используя цикл, как показано в этом коде.

N = 1000
mu1 = 5
mu2 = 10
mu3 = 15
sigma1 = 5
sigma2 = 3
sigma3 = 2
x1 = np.random.randn(N) * sigma1 + mu1
x2 = np.random.randn(N) * sigma2 + mu2
x3 = np.random.randn(N) * sigma3 + mu3
mu = np.array([mu1, mu2, mu3])
sigma = np.array([sigma1, sigma2, sigma3])
x = np.array([x1, x2, x3])
colors = ['royalblue', 'tomato', 'gray']
plt.figure(figsize=(9, 6))
for i in range(len(x)):
    plt.hist(x[i], bins = 30, color = colors[i], 
             label = r'$\mu = $ ' + str(mu[i]) + 
             ', $\sigma = $ ' + str(sigma[i]), alpha = .7)
plt.legend()

После просмотра кода выше, возможно, у вас появится воображение, чтобы создать большое количество гистограмм (более 3) на одном рисунке. Я его приспособлю: D. Вот код для создания и четкой визуализации 10 гистограмм на одной фигуре.

Если вы запустите приведенный выше код, вы получите результат, как показано на рисунке 29.

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

2D-гистограмма

Вы можете сгенерировать двухмерную гистограмму с помощью Matplotlib, как показано на рисунке 30.

Чтобы создать рисунок 30, мне нужно сгенерировать 2 нормальных распределения с помощью этого кода.

N = 1_000
np.random.seed(100)
x = np.random.randn(N)
y = np.random.randn(N)

Чтобы визуализировать переменные x и y на двухмерной гистограмме, вы можете использовать этот код.

plt.hist2d(x, y)

Как и в 1D-гистограмме, Matplotlib сгенерирует 10 интервалов в качестве настройки по умолчанию для 2D-гистограммы. Чтобы изменить его, вы можете применить тот же аргумент, что и на гистограмме 1D, как показано в приведенном ниже коде.

bins = (25, 25)

Вы можете увидеть измененное количество интервалов двумерной гистограммы на рисунке 31.

Вы также можете изменить цветовые карты своей 2D-гистограммы, используя этот аргумент

cmap = orange_blue

Я хочу изменить цветовые карты с Viridis (цветовые карты по умолчанию из Matplotlib) на мои собственные цветовые карты с именем orange_blue. Я объяснил, как создавать свои собственные палитры в предыдущем разделе, или вы можете прочитать это здесь.

Вот полный код для изменения цветовых карт, используемых в 2D-гистограмме.

Если вы запустите приведенный выше код, он создаст фигуру, как показано на рисунке 32.

Вы можете ограничить диапазон значений для каждого (изменить предел шкалы цветов), применив этот аргумент в plt.hist2d ().

cmin = 5, cmax = 25

Вот полный код

N = 10_000
np.random.seed(100)
x = np.random.randn(N)
y = np.random.randn(N)
plt.figure(figsize=(8.5, 7))
plt.hist2d(x, y, bins=(75, 75), cmap = 'jet', cmin = 5, cmax = 25)
cb = plt.colorbar()
cb.set_label('counts each bin', labelpad = 10)

Я использую «струйные» палитры с нижним пределом для формул цветовой шкалы 5 и верхним пределом 25. Код сгенерирует цифру, как показано на рисунке 33.

Я пытаюсь изменить количество сгенерированных случайных чисел с 10000 до 100000, используя этот код.

N = 100_000
np.random.seed(100)
x = np.random.randn(N)
y = np.random.randn(N)
plt.figure(figsize=(8.5, 7))
plt.hist2d(x, y, bins=(75, 75), cmap = 'Spectral')
cb = plt.colorbar()
cb.set_label('counts each bin', labelpad = 10)

Код покажет результат, как показано на рисунке 34.

Рисунок 34 достиг пика около 0 и распределился от -1 до 1, потому что я не менял значения mu и sigma.

Граничный участок

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

Рисунок 35 построен по диаграмме рассеяния и гистограмме 2. Чтобы создать его, вам нужно понять, как настроить вспомогательные сюжеты или оси на одной фигуре. Рисунок 35 построен по 25 осям (5 столбцов и 5 строк). Подробности показаны на рисунке 36. Вы можете создать рисунок 36 с помощью этого кода. Вам необходимо прочитать эту ссылку, чтобы понять ее.

rows = 5
columns = 5
grid = plt.GridSpec(rows, columns, wspace = .4, hspace = .4)
plt.figure(figsize=(10, 10))
for i in range(rows * columns):
    plt.subplot(grid[i])   
    plt.annotate('grid '+ str(i), xy = (.5, .5), ha = 'center', 
                 va = 'center')
for i in range(rows):
    exec (f"plt.subplot(grid[{i}, 0])")
    plt.ylabel('rows ' + str(i), labelpad = 15)
for i in range(columns):
    exec (f"plt.subplot(grid[-1, {i}])")
    plt.xlabel('column ' + str(i), labelpad = 15)

На рисунке 35 показано преобразование рисунка 36. Я объединяю некоторые сетки на рисунке 36 только в 3 большие сетки. Первая сетка объединяет сетки от 0 до 3 (строки 1, столбцы 0 до столбца 3). Я заполню первую сетку графиком гистограммы. Вторая сетка объединяет 16 сеток от строк 1 до строк 4 и от столбца 0 до столбца 3. Последняя сетка создается путем объединения сеток 9, 14, 19 и 24 (строки 1, 2, 3, 4 и столбец 4). .

Чтобы создать первую сетку, вы можете использовать этот код.

rows = 5
columns = 5
grid = plt.GridSpec(rows, columns, wspace = .4, hspace = .4)
plt.figure(figsize=(10, 10))
plt.subplot(grid[0, 0:-1])

После этого добавьте приведенный ниже код, чтобы вставить 1D гистограмму.

plt.hist(x, bins = 30, color = 'royalblue', alpha = .7)

Чтобы создать вторую сетку, вы можете добавить этот код в код выше.

plt.subplot(grid[1:rows+1, 0:-1])

Добавьте этот код для создания диаграммы рассеяния во второй сетке.

plt.scatter(x, y, color = 'royalblue', s = 10)
plt.axis('equal')

Вот код для создания третьей сетки и ее гистограммы. Вам нужно вставить приведенный ниже код в первый код сетки.

plt.subplot(grid[1:rows+1, -1])
plt.hist(y, bins = 30, orientation='horizontal', 
         color = 'royalblue', alpha = .7)

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

Затем я заменю график рассеяния во второй сетке на двухмерную гистограмму, как показано на рисунке 37.

Вы можете воспроизвести рисунок 37 с помощью этого кода.

Пожалуйста, оставьте комментарии в колонке ответов, если вы обнаружите какие-либо ошибки.

04. Гистограмма

Если вы хотите визуализировать данные в виде гистограммы, это вам подходит. Прежде чем я создам гистограмму в Matplotlib, как обычно, я хочу создать фиктивные данные для отображения. Я хочу создать данные о результатах экзамена по математике для шести человек. Для его создания я использую следующий код.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
np.random.seed(100)
N = len(name)
math = np.random.randint(60, 100, N)

Я набираю баллы за экзамен по математике от 60 до 100. Чтобы визуализировать это, вы можете использовать этот код.

plt.bar(name, math, alpha = .7)

После добавления информации я создаю гистограмму, как показано на рисунке 38.

Вот полный код для создания рисунка 38.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
np.random.seed(100)
N = len(name)
math = np.random.randint(60, 100, N)
plt.figure(figsize=(9, 6))
plt.bar(name, math, alpha = .7)
plt.ylabel('Math Exam')

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

np.random.seed(100)
N = len(name)
math = np.random.randint(60, 100, N)
physics = np.random.randint(60, 100, N)
biology = np.random.randint(60, 100, N)
chemistry = np.random.randint(60, 100, N)

Вы можете создать таблицу, в Python мы называем ее DataFrame, используя Pandas. DataFrame, который я создаю из фиктивных данных, показан на рисунке 39.

По умолчанию я не вставлял код о том, как создать DataFrame. Но, если вам это нужно, вы оставляете свой запрос в столбце ответа.

Затем я визуализирую это, как показано на рисунке 40.

Чтобы создать рисунок 40, вы можете использовать этот код.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
np.random.seed(100)
N = len(name)
math = np.random.randint(60, 100, N)
physics = np.random.randint(60, 100, N)
biology = np.random.randint(60, 100, N)
chemistry = np.random.randint(60, 100, N)
rows = 2
columns = 2
plt.figure(figsize=(12, 8))
grid = plt.GridSpec(rows, columns, wspace = .25, hspace = .25)
plt.subplot(grid[0])
plt.bar(name, math, alpha = .7)
plt.ylabel('Math Exam')
plt.ylim(60, 100)
plt.subplot(grid[1])
plt.bar(name, physics, alpha = .7)
plt.ylabel('Physics Exam')
plt.ylim(60, 100)
plt.subplot(grid[2])
plt.bar(name, biology, alpha = .7)
plt.ylabel('Biology Exam')
plt.ylim(60, 100)
plt.subplot(grid[3])
plt.bar(name, chemistry, alpha = .7)
plt.ylabel('Chemistry Exam')
plt.ylim(60, 100)

или используйте этот код, если хотите использовать цикл.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
course_name = ['Math', 'Physics', 'Biology', 'Chemistry']
N = len(name)
rows = 2
columns = 2
plt.figure(figsize=(12, 8))
grid = plt.GridSpec(rows, columns, wspace = .25, hspace = .25)
for i in range(len(course_name)):
    np.random.seed(100)
    course = np.random.randint(60, 100, N)
    plt.subplot(grid[i])
    plt.bar(name, course, alpha = .7)
    plt.ylabel(course_name[i] + ' Exam')
    plt.ylim(60, 100)

Горизонтальная гистограмма

С этим кодом можно использовать горизонтальную гистограмму.

plt.barh(name, course)

Я хочу представить рисунок 40 в виде горизонтальной гистограммы и разных цветов. Вот полный код для его создания.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
course_name = ['Math', 'Physics', 'Biology', 'Chemistry']
colors = ['#00429d', '#7f40a2', '#a653a1', '#c76a9f', 
          '#e4849c', '#d0e848']
N = len(name)
rows = 2
columns = 2
plt.figure(figsize=(12, 8))
grid = plt.GridSpec(rows, columns, wspace = .25, hspace = .25)
for i in range(len(course_name)):
    np.random.seed(100)
    course = np.random.randint(60, 100, N)
    plt.subplot(grid[i])
    plt.barh(name, course, color = colors)
    plt.xlabel(course_name[i] + ' Exam')
    plt.xlim(60, 100)
    plt.gca().invert_yaxis()

После выполнения приведенного выше кода вы получите результат, показанный на рисунке 41.

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

N = len(name)
noise = np.random.randint(1, 3, N)
plt.barh(name, course, xerr = noise)

Я создаю ошибку, используя целое случайное число от 1 до 3, как указано в переменном шуме. После добавления некоторых элементов для моей горизонтальной гистограммы я показываю ее, как показано на рисунке 42.

Вы можете воспроизвести рисунок 42 с помощью этого кода.

name = ['Adam', 'Barry', 'Corbin', 'Doe', 'Evans', 'Frans']
course_name = ['Math', 'Physics', 'Biology', 'Chemistry']
N = len(name)
rows = 2
columns = 2
plt.figure(figsize=(12, 8))
grid = plt.GridSpec(rows, columns, wspace = .25, hspace = .25)
np.random.seed(100)
for i in range(len(course_name)):
    course = np.random.randint(60, 95, N)
    noise = np.random.randint(1, 3, N)
    plt.subplot(grid[i])
    plt.barh(name, course, color = colors, xerr = noise, 
             ecolor = 'k')
    plt.xlabel(course_name[i] + ' Exam')
    plt.xlim(60, 100)
    plt.gca().invert_yaxis()

Возможно, вы понимаете, что мои фиктивные данные (с ошибкой) нереалистичны. Невозможно встретить балл на экзамене из-за неопределенности. Но я думаю, что это хороший пример понимания гистограммы в Matplotlib.

Заключение

Это конец части 1. Как я уже упоминал ранее, я стараюсь ограничить время чтения (менее 30 минут), чтобы вы могли наслаждаться чтением. Эта часть охватывает только 4 из 11 разделов, диаграмму рассеяния, линейную диаграмму, гистограмму и гистограмму. В следующей части я покажу учебные пособия по созданию прямоугольной диаграммы, скрипичного графика, круговой диаграммы, полярной диаграммы, географической проекции, трехмерного графика и контурного графика. Если следующая часть потребляет больше 30 минут, я снова разделю ее.

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

Если вам понравилась эта статья, вот еще несколько статей, которые могут вам понравиться:











Это все. Спасибо, что прочитали эту историю. Комментируйте и делитесь, если вам это нравится. Я также рекомендую вам подписаться на мою учетную запись, чтобы получать уведомление, когда я публикую свою новую историю. Через пару дней я опубликую часть 2 для визуализаций с помощью Matplotlib.