Побудова графіків
Останнє оновлення 2025-10-12 | Редагувати цю сторінку
Приблизний час: 30 хвилин
Огляд
Питання
- Як побудувати графік за моїми даними?
- Як зберегти графік для публікації?
Цілі
- Створення графіку часового ряду, який відповідає одному набору даних.
- Створення діаграми розсіювання, яка показує зв’язок між двома наборами даних.
matplotlib
є
найпоширенішою науковою бібліотекою для візуалізації даних в
Python.
- Зазвичай використовується його частина - бібліотека
matplotlib.pyplot
. - За замовчуванням Jupyter Notebook відображає графіки безпосередньо в блокноті.
- Створення простих графіків є (відносно) нескладним.
PYTHON
time = [0, 1, 2, 3]
position = [0, 100, 200, 300]
plt.plot(time, position)
plt.xlabel('Time (hr)')
plt.ylabel('Position (km)')
Display All Open Figures
У прикладі з Jupyter Notebook виконання комірки призводить до побудови графіку безпосередньо під кодом. Графік також зберігається у блокноті для подальшого перегляду. Проте, інші середовища Python, такі як інтерактивна сесія Python, що ініціюється з термінала, або Python скрипт, виконаний за допомогою командного рядка, потребують додаткової команди для зображення графіку.
Доручіть matplotlib
зобразити графік:
Цю команду також можна використати в блокноті - наприклад, для зображення декількох графіків одночасно, якщо відповідний командний код міститься в одній комірці.
Побудова графіків безпосередньо з Pandas dataframes.
- Для побудови графіків можна також використовувати фрейми даних Pandas.
- Перед побудовою графіку ми перетворюємо назви стовпців із типу
string
наinteger
, оскільки вони представляють числові значення. Для цього використовуємо метод str.replace(), щоб видалити префіксgpdPercap_
, а потім astype(int), щоб перетворити ряд значень рядка (['1952', '1957', ...'2007']
) у ряд цілих чисел:[1925, 1957, ..., 2007]
.
PYTHON
import pandas as pd
data = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='country')
# Extract year from last 4 characters of each column name
# The current column names are structured as 'gdpPercap_(year)',
# so we want to keep the (year) part only for clarity when plotting GDP vs. years
# To do this we use replace(), which removes from the string the characters stated in the argument
# This method works on strings, so we use replace() from Pandas Series.str vectorized string functions
years = data.columns.str.replace('gdpPercap_', '')
# Convert year values to integers, saving results back to dataframe
data.columns = years.astype(int)
data.loc['Australia'].plot()
Виділіть та трансформуйте дані, а потім побудуйте графік.
- За замовчуванням,
DataFrame.plot
зображує рядки на осі X. - Ми можемо транспонувати дані, щоб побудувати кілька графіків разом.
Доступні багато стилів графіків.
- For example, do a bar plot using a fancier style.
Графік також можна побудувати, викликавши безпосередньо функцію
plot
бібліотеки matplotlib
.
- Формат команди є таким:
plt.plot(x, y)
- Колір та формат маркерів також можна вказати як додатковий
необов’язковий аргумент, тобто,
b-
- це синя лінія,g--
- це зелена пунктирна лінія.
Get Australia data from dataframe
PYTHON
years = data.columns
gdp_australia = data.loc['Australia']
plt.plot(years, gdp_australia, 'g--')
Можна побудувати кілька графіків за різними наборами даних одночасно.
PYTHON
# Select two countries' worth of data.
gdp_australia = data.loc['Australia']
gdp_nz = data.loc['New Zealand']
# Plot with differently-colored markers.
plt.plot(years, gdp_australia, 'b-', label='Australia')
plt.plot(years, gdp_nz, 'g-', label='New Zealand')
# Create legend.
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('GDP per capita ($)')
Додавання легенди
Often when plotting multiple datasets on the same figure it is desirable to have a legend describing the data.
Це можна зробити в matplotlib
за два етапи:
- Вкажіть мітку для кожного набору даних у графіку:
PYTHON
plt.plot(years, gdp_australia, label='Australia')
plt.plot(years, gdp_nz, label='New Zealand')
- Доручіть
matplotlib
створити легенду.
За замовчуванням matplotlib спробує розмістити легенду у відповідному
місці. Якщо необхідно вказати конкретне розташування, можна застосувати
аргументи функції loc=
, наприклад, щоб розмістити легенду в
лівому верхньому куті графіку, задайте loc='upper left'
- Побудуйте точкову діаграму співвідношення ВВП Австралії та Нової Зеландії
- Use either
plt.scatter
orDataFrame.plot.scatter
Мінімум та максимум
Заповніть порожні поля нижче, щоб побудувати графік мінімального ВВП на душу населення протягом часу для всіх країн Європи. Потім побудуйте графік максимального ВВП на душу населення в Європі.
Співвідношення
Модифікуйте приклад у примітках, щоб створити діаграму розсіювання, що показує співвідношення між мінімальним і максимальним ВВП на душу населення серед країн Азії за кожен рік у наборі даних. Який зв’язок ви бачите (якщо такий є)?
PYTHON
data_asia = pd.read_csv('data/gapminder_gdp_asia.csv', index_col='country')
data_asia.describe().T.plot(kind='scatter', x='min', y='max')
No particular correlations can be seen between the minimum and maximum GDP values year on year. Здається, статки азійських країн не зростають і не падають разом.
Співвідношення (continued)
You might note that the variability in the maximum is much higher than that of the minimum. Зверніть увагу на максимальні значення та відповідні індекси:

Seems the variability in this value is due to a sharp drop after 1972. Some geopolitics at play perhaps? Given the dominance of oil producing countries, maybe the Brent crude index would make an interesting comparison? У той час як М’янма постійно має найнижчий ВВП, країна з найвищим ВВП змінюється більш помітно.
Більше кореляцій
This short program creates a plot showing the correlation between GDP and life expectancy for 2007, normalizing marker size by population:
PYTHON
data_all = pd.read_csv('data/gapminder_all.csv', index_col='country')
data_all.plot(kind='scatter', x='gdpPercap_2007', y='lifeExp_2007',
s=data_all['pop_2007']/1e6)
Використовуючи онлайн-довідку та інші ресурси, поясніть роль кожного аргументу, який передається у функцію plot.
Гарне місце для пошуку документації до функції графіків - help(data_all.plot).
kind - Як вже було показано, цей параметр визначає тип графіку, який буде створено.
x and y - A column name or index that determines what data will be placed on the x and y axes of the plot
s - Інформацію про цей аргумент можна знайти в документації plt.scatter. Це одне число або одне значення для кожної точки даних. Визначає розмір маркера.
Збереження вашого графіка в файл
Якщо вас влаштовує побудований графік, можливо, ви захочете зберегти його у файл — наприклад, для включення у публікацію. У модулі matplotlib.pyplot є функція, яка виконує це: savefig. Виклик цієї функції
збереже поточний графік у файл my_figure.png
. Формат
файлу буде автоматично визначено з розширення імені файлу (інші формати:
pdf, ps, eps і svg).
Зауважимо, що функції в plt
посилаються на глобальну
змінну графіка і після того, як графік виведено на екран (наприклад, за
допомогою plt.show
) matplotlib змусить цю змінну посилатися
на новий порожній графік. Тому переконайтеся, що ви викликаєте
plt.savefig
перед тим, як графік буде зображено на екрані,
інакше ви можете створити файл із порожнім графіком.
При використанні фреймів даних дані часто генеруються та виводяться
на екрані однією лінією. На додаток до plt.savefig
, ми
можемо зберегти посилання на поточний графік у локальну змінну
(використовуючи plt.gcf
), а потім викликати
savefig
метод цієї змінної для збереження графіка у
файл.
Зробіть ваш графік доступним
Щоразу, коли ви створюєте графіки для статті чи презентації, варто врахувати кілька речей, щоб переконатися, що всі зрозуміють ваші графіки.
- Завжди перевіряйте, що ваш текст достатньо великий для читання.
Використовуйте параметр
fontsize
вxlabel
,ylabel
,title
, таlegend
, а такожtick_params
зlabelsize
щоб збільшити розмір чисел на ваших осях. - Також слід подбати, щоб елементи графіка були добре помітними.
Використовуйте
s
, щоб збільшити розмір маркерів діаграми розсіювання, іlinewidth
, щоб збільшити розміри ліній вашого графіка. - Якщо розрізняти елементи графіка тільки за кольором, це може
ускладнити його сприйняття для людей із дальтонізмом або тих, хто
переглядає матеріали в чорно-білому вигляді (наприклад, після друку).
Для ліній можна використовувати параметр
linestyle
, щоб задати різні стилі ліній. Для діаграм розсіюванняmarker
дозволяє змінювати форму ваших точок. Якщо ви не впевнені у вибраній кольоровій палітрі, скористайтеся інструментами на кшталт Coblis або Color Oracle щоб імітувати, як виглядатимуть ваші графіки для людей з дальтонізмом.
-
matplotlib
— це найпоширеніша наукова бібліотека для побудови графіків у Python. - Побудова графіків можлива безпосередньо з використанням фреймів даних Pandas.
- Побудова графіків включає виділення та трансформацію даних.
- Many styles of plot are available: see the Python Graph Gallery for more options.
- Can plot many sets of data together.