Як працює функція Subplot




Як працює функція Subplot



Посібник з subplots в matplotlib

Якщо ви полізли в аналітику, то, ймовірно, виявили, що там багато, ну дуже багато графіків. Іноді вистачає одного, і тоді все чудово. А якщо потрібні два? А якщо п'ять? І поряд. Тут допоможе matplotlib.

У цьому матеріалі обговоримо функцію subplot бібліотеки matplotlib у Python, яка дозволяє працювати з кількома графіками, а також розглянемо наступні моменти:

Функція subplot

У бібліотеці matplotlib можна створити кілька графіків у межах однієї сітки, кастомізувати кожен графік окремо. Для цього Python використовується функція matplotlib.pyplot.subplot() .

matplotlib.pyplot.subplot(nrows, ncols, idx [, label, projection, . ])
  • nrows задає кількість рядків у сітці;
  • ncols задає кількість стовпців у сітці малювання;
  • idx задає індексне положення ділянки на сітці. Індекс починається з 1 у верхньому лівому кутку і збільшується вправо.
  • idx також може бути заданий як кортеж з двох цілих чисел, що вказують перший та останній індекси, включаючи останній індекс у сітці. Наприклад, subplots(6, 2, (1, 4)) заповнить верхню третину на сітці.

Є й інші необов'язкові параметри, такі як label, projection, sharex, sharey, polar і т.д.

ПРИМІТКА: в matplotlib.pyplot.subplot() можна передати і тризначне ціле число, воно буде 3 параметрами. Наприклад, matplotlib.pyplot.subplot(437) — це те саме, що matplotlib.pyplot.subplot(4, 3, 7). Створюється сітка на 4 рядки та 3 стовпці, і графік додається в 1-й стовпець 3-го рядка (за 7-м індексом).

Давайте приступимо до практики:

# імпортуємо необхідні бібліотеки import matplotlib.pyplot as plt import numpy as np # готуємо дані для побудови графіків ** 4 # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'g') # графік 2 plt.subplot(2, 2, 2) y2, '-.r') # графік 3 plt.subplot(2, 2, 3) plt.plot(x, y3, ':y') # графік 4 plt.subplot(2, 2, 4) plt.plot (x, y4, '--c') plt.show()

Регулювання розміру сітки

Ми можемо налаштувати розмір сітки з візуалізаціями, вказавши список двох значень у параметрі figsize функції matplotlib.pyplot.figure(), де перше значення задає ширину сітки, а друге висоту.

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[9, 7]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') # графік 3 plt.subplot(2, 2, 3) plt.plot(x, y3, '- .y', linewidth = 3) # Графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.show()

Додавання заголовка до всієї сітки

Ми можемо зробити заголовок всій сітці, що містить графіки, вказавши відповідний текст функції matplotlib.pyplot.suptitle() .

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір зображення plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок plt.suptitle('Different degree curves') # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt. plot(x, y1, 'g', linewidth=2) # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') # графік 3 2, 3) plt.plot(x, y3, '-.y', linewidth=3) # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.show()

Додавання заголовків до окремих графіків

Ми також можемо назвати графіки на сітці, вказавши текст заголовка на етапі побудови кожного з них:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір зображення plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок plt.suptitle('Different degree curves') # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt. plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve') # заголовок графіка # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2 , color='k') plt.title('Plot 2: 2nd Degree curve') # заголовок графіка # графік 3 plt.subplot(2, 2, 3) plt.plot(x, y3, '-.y', linewidth=3) plt.title ('Plot 3: 3rd Degree curve') # заголовок графіка # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve') # заголовок графіка plt.show()

Регулювання розміру шрифту заголовка

Ми можемо задати розмір шрифту для тексту заголовка (як загальний, для сітки, так і для кожного графіка) за допомогою параметра fontsize:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок, задаємо розмір шрифту plt.suptitle('Different degree curves', fontsize=19) # будуємо графіки # графік 1 plt.subplot( 2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15) # заголовок + шрифт # графік 2 plt.subplot( 2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15) # заголовок + шрифт # графік 3 plt.subplot(2, 2, 3) plt. plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15) # заголовок + шрифт # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15) # заголовок + шрифт plt.show()

Виділення заголовка напівжирним шрифтом

Ми можемо зробити шрифт заголовка жирним (як загальний для сітки, так і приватний для кожного графіка), додавши параметр fontweight з потрібним цілочисловим значенням (600+ для жирного шрифту) або рядок 'bold' :

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок, задаємо розмір шрифту і виділяємо його plt.suptitle('Different degree curves', fontsize=19, fontweight='bold') # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15) # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15) # графік 3 plt.subplot(2, 2, 3) plt.plot( x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15) # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15) plt.show()

Виставлення позиції заголовка

Ми можемо встановити положення тексту заголовка, передавши ще два параметри x і y . Ці значення є координатами сітки x і y відповідно:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок, задаємо розмір шрифту, виділяємо його та позиціонуємо plt.suptitle('Different degree curves', x=0.5, y=0, fontsize =17, fontweight='700') # будуємо графіки plt.subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve' , loc = 'left', fontsize=15) plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', loc='right', fontsize=15 ) plt.subplot(2, 2, 3) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', loc='left', fontsize= 15) plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', loc='right', fontsize =15) plt.show()

Відступи у заголовках

Ми можемо налаштувати відступи, використовуючи параметр y, або параметр pad. y — координата в сітці (значення варіюється від 0 до 1), в pad — відступ тексту заголовка від графіка:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок plt.suptitle('Different degree curves', y=1.1, fontsize=19, fontweight='bold') # будуємо графіки plt .subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, y=1.1) plt.subplot( 2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, y=1.1) plt.subplot(2, 2, 3) plt.plot(x , y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=17) plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=17) plt.show()

Додавання легенди

Додати легенду можна за допомогою параметра label та методу legend:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # змінюємо розмір сітки plt.figure(figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # додаємо загальний заголовок plt.suptitle('Different degree curves', y=1.1, fontsize=19, fontweight='bold') # будуємо графіки plt .subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2, label='1st degree curve') plt.title('Plot 1: 1st Degree curve', fontsize=15, y=1.1) plt.legend(loc='upper left') plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k', label='2nd degree curve') plt.title('Plot 2 : 2nd Degree curve', fontsize=15, y=1.1) plt.legend(loc='upper left') plt.subplot(2, 2, 3) plt.plot(x, y3, '-.y', linewidth =3, label='3rd degree curve') plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=17) plt.legend(loc='upper left') plt.subplot(2, 2 4) plt.plot(x, y4, '--b', linewidth=3, label='4th degree curve') plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=17) plt.legend(loc='upper left') plt.show()

У matplotlib ми також можемо додати легенду, яка буде спільною для всіх графіків. Побудуємо їх, визначивши осі та сітку за допомогою subplots() та визначимо глобальну легенду для малювання за допомогою figure.legend() з наступними параметрами:

  • список всіх об'єктів графіка (line2D) (тут, криві), які ми хочемо додати до легенди.
  • lables : Список позначок для кожного графіка (кривої).
  • loc : розташування легенди (необов'язково).
  • title: заголовок легенди (необов'язково).
# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # визначаємо сітку та осі за допомогою matplotlib.pyplot.subplots() fig, ax = plt.subplots(2, 2, figsize=[11, 9]) # готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 fig.suptitle('Different degree curves', fontsize=19, fontweight='bold') # будуємо графіки c1 = ax[0,0].plot(x, y1, 'g', linewidth=2) ax[0,0].set_title('Plot 1', fontsize=15) c2 = ax [0,1]. scatter (x, y2, color='k') ax[0,1].set_title('Plot 2', fontsize=15) c3 = ax[1,0].plot(x, y3, '-.y', linewidth=3 ) ax[1,0].set_title('Plot 3', fontsize=15) c4 = ax[1,1].plot(x, y4, '--b', linewidth=3) .set_title('Plot 4', fontsize=15) label_list = ['1st degree curve', '2nd degree curve', '3rd degree curve', '4th degree curve', '4th degree curve'] fig.legend([c1, c2, c3, c4], labels=label_list, loc='upper left', borderaxespad=0.1) plt.show()

Загальні осі графіків

Можна побудувати графіки так, щоб у них була одна або дві загальні осі. Для цього у параметрах sharex і sharey потрібно виставити значення True. Вісь У не можна зробити спільною для графіків по вертикалі, Х - по горизонталі.

import matplotlib.pyplot як import numpy як np x = np.linspace(0, 10, 10) y1 = x + 3 y2 = x + 9 y3 = x + 13 y4 = x + 17 fig, ax = plt.subplots( 2, 2, figsize = [11, 9]) fig.suptitle ('Different degree curves', fontsize = 19, fontweight = 'bold') ax [0,0]. =2) ax[0,0].set_title('Plot 1: 1st degree curve', fontsize=15) ax[0,1]. .set_title('Plot 2: 2nd degree curve', fontsize = 15) ax [1,0].plot (x, y3, '-.y', linewidth = 3) ax [1,0]. Plot 4 ax [1,1].plot (x, y4, '--b', linewidth = 3) ax [1,1]. () # --------------------------------------------------- ---------------------- fig, ax = plt.subplots (2, 2, sharex = True, sharey = True, figsize = [11, 9]) fig.suptitle('Different degree curves', fontsize=19, fontweight='bold') ax[0,0].plot(x, y1, 'g', linewidth = 2) ax [0,0]. set_title ( 'Plot 1: 1st degree curve', fontsize = 15) ax [0,1]. scatter (x, y2, color = 'k') ].set_title('Plot 2: 2nd degree curve', fontsize=15) ax[1,0].plot(x, y3, '-.y', linewidth=3) ax[1,0].set_title(' Plot 3: 3rd degree curve', fontsize=15) ax[1,1].plot(x, y4, '--b', linewidth=3) ax[1,1].set_title('Plot 4: 4th degree curve', fontsize=15) plt.show()

Підписи для загальних осей

У matplotlib немає прямого методу додавання підпису для загальної осі, але ми можемо це зробити.

  • створимо сітку із графіками;
  • за допомогою функції figure.add_subplot() додамо вісь розміром із сітку, в яку будуть укладені всі графіки;
  • відключимо відображення значень на осях цього нового графіка і показуватимемо лише позначки осей. Це можна зробити, вказавши параметри labelcolor="none", bottom=False та left=False функції tick_param();
  • тепер ми можемо додати позначки осі x та осі y на цей збільшений графік.
import matplotlib.pyplot як import numpy як np x = np.linspace(0, 10, 10) y1 = x + 3 y2 = x + 9 y3 = x + 13 y4 = x + 17 fig, ax = plt.subplots( 2, 2, figsize = [11, 9]) fig.suptitle ('Different degree curves', fontsize = 19, fontweight = 'bold') ax [0,0]. =2) ax[0,0].set_title('Plot 1: 1st degree curve', fontsize=15) ax[0,1]. .set_title('Plot 2: 2nd degree curve', fontsize = 15) ax [1,0].plot (x, y3, '-.y', linewidth = 3) ax [1,0]. [1,1].plot(x, y4, '--b', linewidth=3) ax[1,1].set_title('Plot 4: 4th degree curve', fontsize=15) fig.add_subplot(1, 1, 1, frame_on=False) plt.tick_params(labelcolor="none", bottom=False, left=False) plt.xlabel('Common X-Axis', fontsize=15, fontweight='bold') plt.ylabel ('Common Y-Axis', fontsize=15, fontweight='bold') plt.show()

Також можна створити сітку із загальними мітками осей для всіх колонок візуалізацій на ній.

# готуємо дані для побудови графіків x = np.linspace(0, 10, 10) y1 = x + 3 y2 = x + 9 y3 = x + 13 y4 = x + 17 # визначаємо сітку та осі за допомогою matplotlib.pyplot.subplots (), # вказуємо спільне використання осі x та осі y для графіків fig, ax = plt.subplots(2, 2, sharex=True, sharey=True, figsize=[11, 9]) fig.suptitle('Different degree curves ', fontsize=19, fontweight='bold') # будуємо графіки # графік 1 ax[0,0].plot(x, y1, 'g', linewidth=2) ax[0,0].set_title('Plot 1: 1st degree curve', fontsize=15) # графік 2 ax [0,1]. scatter (x, y2, color = 'k') ax [0,1]. ,0].plot(x, y3, '-.y', linewidth = 3) ax [1,0]. ].plot(x, y4, '--b', linewidth=3) ax[1,1].set_title('Plot 4: 4th degree curve', fontsize=15) # додаємо графік на сітку, # він буде включати в себе всі підграфіки, але відображатися будуть тільки осі fig.add_subplot(1, 1, 1, frame_on=False) та їх мітки з великого графіка plt.tick_params(labelcolor="none", bottom=False, left=False) # додаємо осі на великий графік plt.xlabel('X-Axis', fontsize=15, fontweight='bold') plt.ylabel('Y-Axis', fontsize=15, fontweight='bold') plt.show()

Регулювання відстані між графіками

Можна налаштувати відстань між графіками, додавши функцію matplotlib.pyplot.subplots_adjust() з відповідними параметрами. Параметри можуть бути такі:

  • top: вказує верх (верхню частину) графіка;
  • bottom: вказує низ (нижню частину) графіка;
  • left: вказує ліву сторону графіка;
  • right : вказує праву сторону вкладених ділянок сітки;
  • wspace : вказує ширину, яка має бути зарезервована для порожнього простору між графіками;
  • hspace : вказує висоту, яка має бути зарезервована для порожнього простору між графіками;
# міняємо розмір малювання plt.figure(figsize=[11, 9]) # готуємо дані x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x * * 4 plt.suptitle('Different degree curves', y=1.13, fontsize=19, fontweight='bold') plt.subplots_adjust(left=0.13, right=0.93, top=1.0, bottom=0.27, wspace=0.3, hspace=0.3) # будуємо графіки # графік plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, y=1.1) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, y=1.1) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') # графік 3 plt.subplot(2, 2, 3) plt.plot( x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.show()

Автопідбір відступів

У matplotlib є спосіб автоматично регулювати відстань між графіками, залежно від розмірів сітки. Просто потрібно додати функцію matplotlib.pyplot.tight_layout().

Ми також можемо задати додатковий відступ, вказавши параметри pad, w_pad, h_pad - вони задають додаткові відступи навколо межі сітки та між графіками. Значення їхніх параметрів задаються як частка розміру шрифту.

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # готуємо дані x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 plt .suptitle('Different degree curves', y=1.13, fontsize=19, fontweight='bold') # будуємо графіки # графік 1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'g' , linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, y=1.1) # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color=' k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, y=1.1) # графік 3 plt.subplot(2, 2, 3) plt.plot(x, y3, '-.y', linewidth= 3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=17) # графік 4 plt.subplot(2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=17) plt.show() # ------------------- -------------------------------------------------- # будуємо графіки з автопідбором відступу plt.suptitle('Different degree curves', y=1.13, fontsize=19, fontweight='bold') # графік 1 plt.subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize= 15, y=1.1) # графік 2 plt.subplot(2, 2, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, y=1.1) # графік 3 plt.subplot(2, 2, 3) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize= 15, pad = 17) # Графік 4 plt.subplot (2, 2, 4) plt.plot(x, y4, '--b', linewidth=3) plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=17) plt.tight_layout() plt. show()

Графіки різного розміру

Можемо створити сітку із графіками різного розміру. Для цього потрібно розділити сітку на секції, а ці секції ще на секції і так далі. На прикладі наочніше:

# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # готуємо дані x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 # змінюємо розмір сітки plt.figure (figsize=[11, 9]) plt.suptitle('Different degree curves', y=1.05, fontsize=19, fontweight='bold') # будуємо графіки # графік 1 plt. .plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel( 'Y-Axis') # графік 2 plt.subplot(2, 2, 3) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, pad=12) plt.xlabel( 'X-Axis') plt.ylabel('Y-Axis') # графік 3 plt.subplot(1, 2, 2) plt.plot(x, y3, '-.y', linewidth=3) plt.title ('Plot 3: 3rd Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.tight_layout() plt.show()
# імпортуємо бібліотеки import matplotlib.pyplot as plt import numpy as np # готуємо дані x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 # змінюємо розмір сітки plt.figure(figsize=[11, 9]) plt.suptitle('Different degree curves', y=1.05, fontsize=19, fontweight='bold') Будуємо графіки # графік 1 plt.subplot , 1, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis ') plt.ylabel('Y-Axis') # графік 2 plt.subplot(3, 2, 3) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') # графік 3 plt.subplot(3, 2, 4) plt.plot(x, y3, ' -.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') # Графік 4 plt.subplot(3, 1, 3) plt.plot(x, y4, ':r', linewidth=2) plt.title('Plot 4: 4th Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt. ylabel('Y-Axis') plt.tight_layout() plt.show()

Налаштування геометрії сітки

Ми можемо налаштовувати макет за допомогою функції gridspec і задати геометрію сітки, на якій будуть розміщені графіки. Для цього потрібно вказати кількість рядків та кількість стовпців сітки. Також можна налаштувати параметри розташування графіків, наприклад, left, right, bottom і т.д.

Синтаксис функції gridspec наступний:

from matplotlib import pyplot as plt from matplotlib import gridspec fig = plt.figure() grid_obj = gridspec. (grid_obj[0, 0]) ax2 = fig.add_subplot(grid_obj[0, 1]) . . . axN = fig.add_subplot(grid_obj[nrows-1, ncols-1])

Функція gridspec.GridSpec() використовується для створення сітки з n рядків та n стовпців. Параметри функції:

  • nrows : задає кількість рядків у сітці.
  • ncols : задає кількість rколонок у сітці.
  • figure : вказує фігуру (малюнок), на якій будуть розміщені сітки. Вона необов'язкова і за замовчуванням дорівнює None.
  • left, bottom, right і top: необов'язкові параметри, що визначають розмір графіків у частках ширини та висоти фігури. При цьому ліва частина не може бути більшою за праву, а нижня частина не може бути більшою за верхню.
  • wspace та hspace : необов'язкові параметри, що визначають відступи між графіками, задаються у частках від середньої ширини та висоти осі відповідно.
import matplotlib.pyplot plt import numpy np x = np.linspace(0, 10, 10) y1 = x + 3 y2 = x ** 2 y3 = x ** 3 y4 = x ** 4 fig = plt.figure (constrained_layout = True) spec = gridspec. GridSpec (ncols = 2, nrows = 2, figure = fig) ax1 = fig.add_subplot (spec [0, 0]) 2) ax1.set_title('Plot 1: 1st degree curve', fontsize=15) ax2 = fig.add_subplot(spec[0, 1]) ax2.scatter(x, y2, color='k') ax2.set_title('Plot 2: 2nd degree curve', fontsize=15) ax3 = fig.add_subplot(spec[1, 0]) ax3.plot(x, y3, '-.y', linewidth=3) ax3. set_title('Plot 3: 3rd degree curve', fontsize=15) ax4 = fig.add_subplot(spec[1, 1]) ax4.plot(x, y4, '--b', linewidth=3) ax4.set_title( 'Plot 4: 4th degree curve', fontsize=15) plt.show()

Тепер використовуємо gridspec() із графіками різного розміру.

x = np.linspace(0, 10, 10) y = [] y.append(x + 3) y.append(x**2) y.append(x**3) y.append(x**4 ) l_style = ['-', ':', '-.', '--'] l_color = ['g', 'k', 'y', 'b'] k = 0 fig2 = plt.figure( figsize=[7, 5], constrained_layout=True) widths = [1.5, 3] heights = [2, 3] spec2 = fig2.add_gridspec(ncols=2, nrows=2, width_ratios=widths, height_ratios=height in range(2): for col in range(2): ax = fig2.add_subplot(spec2[row, col]) ax.plot(x, y[k], color=l_color[k], linestyle=l_style[k], linewidth=3) ax.set_title('Plot'+str( k+1)+' : '+str(k+1)+' degree curve', fontsize=15) k += 1 plt.show()

Додавання напрямних

Для кожного з графіків на макеті можна задати напрямні:

# без напрямних import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 plt.figure(figsize=[11, 5 ]) plt.suptitle('Different degree curves', y=1.13, fontsize=19, fontweight='bold') plt.subplot(1, 3, 1) plt.plot(x, y1, 'g', linewidth= 2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.grid() plt. subplot(1, 3, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel(' Y-Axis') plt.grid() plt.subplot(1, 3, 3) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve' , fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.grid() plt.tight_layout() plt.show() # ----- -------------------------------------------------- -------------- # з напрямними plt.figure(figsize=[11, 11]) plt.suptitle('Different degree curves', y=1.13, fontsize=19, fontweight='bold') plt.subplot(3, 1, 1) plt.plot(x, y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.grid() plt.subplot( 3, 1, 2) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis' ) plt.ylabel('Y-Axis') plt.grid() plt.subplot(3, 1, 3) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=17) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.grid() plt.tight_layout() plt.show()

Регулювання кроку напрямних

Ми можемо налаштувати відстань між напрямними, збільшивши значення xticks та yticks (функції xlim() та ylim() відповідно):

import matplotlib.pyplot plt import numpy np x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 plt.figure(figsize=[11, 9]) plt .suptitle('Different degree curves', y=1.05, fontsize=19, fontweight='bold') # додамо xlim() і ylim() до кожного графіка plt.subplot(2, 2, 1) plt.plot(x , y1, 'g', linewidth=2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis ') plt.xlim(0, 12) plt.ylim(0, 12) plt.grid() plt.subplot(2, 2, 3) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve ', fontsize=15, pad=12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.xlim(0, 15) plt.ylim(0, 150) plt.grid( alpha=0.8) plt.subplot(1, 2, 2) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve'; =12) plt.xlabel('X-Axis') plt.ylabel('Y-Axis') plt.xlim(0, 15) plt.ylim(0, 1500) plt.grid(alpha=0.6) plt.tight_layout() plt.show()

Регулювання кольору напрямних

Колір напрямних також можна змінювати — додамо параметр color зі значенням як назви кольору, чи його коду.

import matplotlib.pyplot plt import numpy np x = np.linspace(0, 10, 10) y1 = x y2 = x ** 2 y3 = x ** 3 plt.figure(figsize=[11, 9]) plt .suptitle('Different degree curves', y=1.05, fontsize=19, fontweight='bold') # прикрашаємо напрямні plt.subplot(2, 2, 1) plt.plot(x, y1, 'g', linewidth= 2) plt.title('Plot 1: 1st Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis', fontsize=13) plt.ylabel('Y-Axis', fontsize=13 ) plt.xlim(0, 12) plt.ylim(0, 12) plt.grid(color='red', linestyle='-.', linewidth=1) # графік 2 plt.subplot(2, 2, 3) plt.scatter(x, y2, color='k') plt.title('Plot 2: 2nd Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis', fontsize=13) plt .ylabel('Y-Axis', fontsize=13) plt.xlim(0, 15) plt.ylim(0, 150) plt.grid(alpha=0.8, color='blue', linestyle=':', linewidth =1.2) # графік 3 plt.subplot(1, 2, 2) plt.plot(x, y3, '-.y', linewidth=3) plt.title('Plot 3: 3rd Degree curve', fontsize=15, pad=12) plt.xlabel('X-Axis', fontsize =13) plt.ylabel('Y-Axis', fontsize=13) plt.xlim(0, 15) plt.ylim(0, 1500) plt.grid(alpha=0.6, color='green', linestyle=' --', linewidth=1.4) plt.tight_layout() plt.show()

Додавання зображень на графік

Також як графіки можна використовувати зображення, які зберігаються у вас на локальному диску, за допомогою модуля matplotlib.image. Функція matplotlib.image.imread() імпортує та зчитує файл. Як аргумент необхідно вказати рядок, що містить шлях до файлу, а потім його ім'я. Функція axes.imshow() побудує графік із зображенням на вказаних осях.

import matplotlib.pyplot as plt import matplotlib.image as img import random import os cwd = os.getcwd() source_path = cwd + '\imagedata\' fig, ax = plt.subplots(2,2) plt.suptitle( 'Random Images', y=1.05, fontsize=19, fontweight='bold') for i in range(2): for j in range(2): image_file = random.choice(os.listdir(source_path)) image_path = os.path.join(source_path, image_file) image = img.imread(image_path) ax[i,j].set_title(image_file, fontsize=15, pad=12) ax[i,j].imshow(image) ax[ i,j].grid() plt.tight_layout() plt.show() # -------------------------------------------------- ---------------- plt.figure() plt.suptitle('Random Images', y=1.05, fontsize=19, fontweight='bold') for i in range(4 ): image_file = random.choice(os.listdir(source_path)) image_path = os.path.join(source_path, image_file) image = img.imread(image_path) plt.subplot(2, 2, i+1) plt.title (image_file, fontsize=15, pad=12) plt.imshow(image) plt.tight_layout() plt.show()

Регулювання розміру зображення

Регулювати розмір зображення можна, змінюючи розмір сітки, за допомогою matplotlib.pyplot.figure() з аргументом figsize . Він приймає список із двох значень: ширину та висоту сітки.

import matplotlib.pyplot as plt import matplotlib.image as img import random import os cwd = os.getcwd() source_path = cwd + '\imagedata\' plt.figure(figsize=[7, 7]) plt.suptitle( 'Random Images', y=1.05, fontsize=19, fontweight='bold') for i in range(4): image_file = random.choice(os.listdir(source_path)) image_path = os.path.join(source_path, image_file) image = img.imread(image_path) plt.subplot(2, 2, i+1) plt.title(image_file, fontsize=15, pad=12) plt.imshow(image) plt.grid() plt.tight_layout () plt.show()

Додавання колірної шкали

Створимо зображення у вигляді колірної шкали та додамо окремі осі, використовуючи функцію matplotlib.figure.Figure.add_axes() з параметром у вигляді списку із 4-х значень [left, bottom, width, height]. Параметр mappable функції matplotlib.figure.Figure.colorbar() являє собою об'єкт графіка, кольори якого повинні бути відображені в панелі кольорів, параметр cax являє собою осі, на яких повинна бути намальована колірна панель.

import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(2, 2, figsize=[7, 7]) for x in ax.flat: image = x.imshow(np.random.random(( 15,15)), vmin=0, vmax=1) color_bar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) show()

3D-графіки

Підмодуль mpl_toolkits.mplot3d.axes3d використовується для створення трьох осей та побудови графіків тривимірних фігур. Додамо осі за допомогою функції figure.add_subplot() з додатковим параметром projection='3d' , потім створимо 3D-графік і додамо до цих осях.

Описаний метод працює і для створення декількох графіків, просто додайте на сітку більше осей з 3D-фігурами.

import matplotlib.pyplot як import import numpy як np з matplotlib import cm # для колірної шкали від mpl_toolkits.mplot3d.axes3d import get_test_data fig = plt.figure(figsize=[9, 4]) plt. =1.05, fontsize=19, fontweight='bold') # графік 1 # задаємо осі ax = fig.add_subplot(1, 2, 1, projection='3d') # будуємо 3D-графік X = np.arange(-5 , 5, 0.25) Y = np.arange(-5, 5, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np. sin(R) surface_pl = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm, linewidth=0) ax.set_zlim(-1.01, 1.01) fig.colorbar(surface_plt, shrink=0.5, aspect =10) ax.set_title('A 3D Surface') ax.set_xlabel('X-Axis') ax.set_ylabel('Y-Axis') ax.set_zlabel('Z-Axis') # графік 2 # задаємо осі ax = fig.add_subplot(1, 2, 2, projection='3d') # будуємо 3D-каркас графіка X, Y, Z = get_test_data(0.05) ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10) ax.set_title('3D Wireframe') ax.set_xlabel('X-Axis') ax.set_ylabel('Y-Axis') ax.set_zlabel('Z-Axis') plt. tight_layout() plt.show()

Висновок

Якщо ви дійшли сюди самі, пішки та без fast travel, то ви. дуже любите графіки. Дивною неприродною любов'ю. Віримо, що це кохання взаємне :)

Функція plt.subplots()

Дуже радий, що ви запитали функцію plt.subplots() з бібліотеки matplotlib.pyplot . Ця функція дуже корисна при створенні графіків та діаграм у Python.

Перед тим, як я наведу розгорнуту відповідь на ваше запитання, давайте розберемося з основним поняттям: що таке plt.subplots() і коли його використовувати.

Функція plt.subplots() дозволяє створити сітку із графіків різного розміру на одній спільній фігурі. Вона автоматично розбиває фігуру на підзаголовки (subplots) та повертає об'єкти-осі (axes) для кожного підзаголовка. Це дозволяє нам зручно створювати та керувати кількома графіками одночасно.

Розгляньмо приклад коду, щоб прояснити це поняття.Припустимо, ми маємо набір даних, що складається з двох масивів: x і y . Ми хочемо побудувати два графіки на одній фігурі - один графік відображатиме залежність y від x, а другий графік показуватиме залежність y^2 від x.

Першим кроком є ​​імпорт необхідних бібліотек:


import matplotlib.pyplot as plt

Потім ми створюємо масиви даних x і y:

x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25]

Тепер ми можемо використовувати функцію plt.subplots() для створення сітки із двох графіків. Приклад коду виглядає так:

fig, axes = plt.subplots(1, 2) axes[0].plot(x, y) axes[0].set_title('Залежність y від x') axes[0].set_xlabel('x') axes[ 0].set_ylabel('y') axes[1].plot(x, [val**2 for val in y]) axes[1].set_title('Залежність y^2 від x') axes[1]. set_xlabel('x') axes[1].set_ylabel('y^2') plt.tight_layout() plt.show()

У наведеному вище коді ми використовуємо plt.subplots(1, 2) , де аргументи 1 і 2 вказують кількість рядків та стовпців графіків відповідно. Це означає, що ми матимемо один рядок і два стовпці з графіками.

Потім ми досягаємо об'єктів-осей через масив axes , використовуючи індекси 0 і 1 . Метод .plot() використовується для побудови графіків та аргументами є масиви x та y .

Методи .set_title() , .set_xlabel() , .set_ylabel() використовуються для встановлення заголовків та підписів осей для кожного графіка.

Метод plt.tight_layout() використовується для автоматичного визначення оптимального розташування графіків на фігурі, щоб уникнути їх перекриття.

Для завершення процесу побудови графіків використовується plt.show(), який відображає фігуру із графіками.

В результаті виконання коду вище ми отримаємо вікно з сіткою з двох графіків. Один графік відображатиме залежність y від x, а другий - залежність y^2 від x. Заголовки та підписи осей будуть відповідним чином налаштовані.

Сподіваюся, ця розгорнута відповідь допомогла вам зрозуміти, як використовувати функцію plt.subplots() у бібліотеці matplotlib.pyplot . Якщо у вас виникнуть інші питання, не соромтеся ставити!

Subplot - функція для створення субграфіків у Python

subplot - це функція в бібліотеці matplotlib, яка дозволяє створювати групи підграфіків (сабплотів) всередині однієї фігури. Вона дуже корисна при відображенні кількох графіків в одному вікні та порівнянні даних.

Щоб використовувати функцію subplot, нам потрібно імпортувати бібліотеку matplotlib і підключити модуль pyplot. Ось приклад коду для цього:

import matplotlib.pyplot as plt # Створюємо фігуру та задаємо розмір fig = plt.figure(figsize=(10, 6)) # Створюємо підграфіки за допомогою subplot ax1 = fig.add_subplot(2, 2, 1) # Верхній лівий ax2 = fig .add_subplot(2, 2, 2) # Верхній правий ax3 = fig.add_subplot(2, 2, 3) # Нижній лівий ax4 = fig.add_subplot(2, 2, 4) # Нижній правий # Налаштування даних та відображення на кожному підграфіці ax1.plot([1, 2, 3, 4], [1, 4, 2, 3], 'r--') # Червоний пунктирний графік ax2.bar(['A', 'B', 'C') ], [4, 2, 7], color='g') # Стовпчаста діаграма ax3.scatter([1, 3, 2], [7, 2, 5], marker='o', color='b') # Точкова діаграма ax4 .pie([15, 30, 45, 10], labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%') # Кругова діаграма # Додавання заголовків до кожному подграфіку ax1.set_title('Графік 1') ax2.set_title('Діаграма 2') ax3.set_title('Діаграма 3') ax4.set_title('Діаграма 4') # Відображення графіків plt.show()

У цьому прикладі ми створили фігуру з розміром 10 на 6 (у дюймах) і додали 4 підграфіки за допомогою функції add_subplot. Ми вказали розміщення підграфіків у сітці 2 на 2, і кожному підграфіку надали відповідний об'єкт-підграфік ax1, ax2, ax3, ax4.

Потім ми відобразили різні типи графіків на кожному подграфіці. Наприклад, першому подграфике ми побудували червоний пунктирний графік із даними [1, 2, 3, 4] і [1, 4, 2, 3].На другому підграфіці ми створили стовпчасту діаграму з даними ['A', 'B', 'C'] та [4, 2, 7].

На третьому підграфіці ми відобразили точкову діаграму з даними [1, 3, 2] та [7, 2, 5], використовуючи маркер 'o' та колір 'blue'. Нарешті, на четвертому підграфіці ми побудували кругову діаграму з даними [15, 30, 45, 10] та підписами ['A', 'B', 'C', 'D']. Ми також використовували autopct='%1.1f%%', щоб відобразити відсоток на кожному секторі.

Крім того, ми додали заголовки до кожного подграфіка за допомогою методу set_title, щоб краще ідентифікувати кожен графік.

Нарешті ми використовували функцію show(), щоб відобразити всі графіки на екрані.

У результаті при запуску цього коду ви отримаєте вікно з чотирма підграфіками, кожен з яких відображає різні типи графіків. Це приклад використання функції subplot для створення групи підграфіків усередині однієї фігури в бібліотеці matplotlib.

Схожі статті

  • Як працює функція Coming Home
  • Чому погано працює інтернет на телевізорі
  • Як працює реле 220 вольт
  • Як працює вентиляція у приміщенні
  • Як працює ревербератор
  • На якому принципі працює металошукач
  • Що робити якщо не працює індукційна плита
  • Що робити якщо джойстик від плейстейшен не працює
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x