Как показвате информацията е от решаващо значение

Matplotlib е майката на библиотеките за визуализация на данни за Python. Той служи като основа за някои други инструменти, използвани за визуализиране на данни, като Seaborn и Pandas.

Matplotlib предлага голяма гъвкавост, така че можете да персонализирате или коригирате почти всичко в графиките. Това е предимство, ако искате да имате пълен контрол върху визуализациите, но изисква да напишете повече код.

В тази статия ще разгледаме 3 трика, които могат да се използват за персонализиране на графиките на Matplotlib, които са:

  • Намалете броя на отметките по оста x или y
  • Добавете вторична у-ос
  • Споделена ос x и стегнато оформление за фигури с подграфики

Ние ще създаваме линейни графики, но тези трикове могат да се приложат и към други типове графики. Ние, разбира се, се нуждаем от някои данни, върху които да работим. Създадох набор от данни с фиктивни данни за цена и продажби. Можете да изтеглите набора от данни от хранилището набори от данни на моята страница в GitHub. Нека започнем със създаването на Pandas DataFrame от този набор от данни.

import pandas as pd
import numpy as np
df = pd.read_csv("mock_sales_data.csv", nrows=100)
df.head()

Наборът от данни съдържа колони за дата, цена и количество на продажбите. Прочетох само първите 100 реда от набора от данни за демонстрационни цели.

Намалете броя на отметките

Ако броят на точките от данни, нанесени върху ос, е голям, отметките може да изглеждат твърде тесни или дори да се припокриват в някои случаи. Когато работите с данни от времеви редове, оста x обикновено съдържа дати, които заемат големи пространства, така че е по-добре да намалите броя на отметките по оста.

Нека първо направим пример, без да ограничаваме броя отметки по оста x.

import matplotlib.pyplot as plt
plt.style.use("seaborn-darkgrid")
# create a Figure object
plt.figure(figsize=(12, 6))
# create the line plot
plt.plot(df["Date"], df["Price"])
plt.show()

Отметките се припокриват и ние не можем да ги разчетем. Нека създадем същия график, но с по-малък брой отметки.

# create a Figure object
plt.figure(figsize=(12, 6))
# create the line plot
plt.plot(df["Date"], df["Price"])
# show one tick for every 15 value and change the fontsize of ticks
plt.xticks(np.arange(0, len(df), 15), fontsize=12)
plt.yticks(fontsize=12)
plt.show()

Сега изглежда много по-добре. Уточнихме местоположението на отметките с помощта на функцията за подреждане на NumPy.

Втора у-ос

Понякога искаме да покажем две променливи на едни и същи диаграми. Например, цената на даден продукт и неговите продажни количества могат да бъдат начертани заедно, за да видите ефекта на цената върху броя на продажбите.

Ако цената и продажните количества имат много различни диапазони на стойност, е необходима вторична ос y. В противен случай сюжетът няма да изглежда добре или дори може да бъде невъзможен за четене.

Следва пример, който демонстрира този случай. Колоните за количеството и цената на продажбите в нашия DataFrame се визуализират на една и съща линейна графика с една у-ос.

Тъй като ценовите стойности са много ниски в сравнение с продажните количества, ние ги виждаме като права линия, която не ни казва нищо за връзката между цената и продажните количества.

Нека генерираме същия график с вторична у-ос.

# create a Figure and an Axes object
fig, ax1 = plt.subplots(figsize=(12,6))
# create the second Axes object with same x-axis
ax2 = ax1.twinx()
# create the line plots
ax1.plot(df["Date"], df["Price"])
ax2.plot(df["Date"], df["SalesQty"], color="orange")
# create axis labels and title
ax1.set_ylabel("Price", fontsize=15)
ax2.set_ylabel("SalesQty", fontsize=15)
# customize x-ticks and y-ticks
ax1.tick_params(axis='both', which='major', labelsize=12)
ax2.tick_params(axis='both', which='major', labelsize=12)
# reduce the number of x-ticks
plt.xticks(np.arange(0, len(df), 15))
# remove the grid lines
ax1.grid(False)
ax2.grid(False)
plt.show()

Изглежда много по-добре. Можем да наблюдаваме обратната връзка между цената и продажните количества.

Споделена ос x и стегнато оформление за фигури с подграфики

Можем да създадем множество подплотове върху обект Фигура. Matplotlib позволява създаване на решетка от подплотове с помощта на функцията за подграфи. Например, следващият ред код създава фигура с 4 подграфика като решетка 2x2.

fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=2, ncols=2)

Ние персонализираме структурата на мрежата с помощта на параметрите nrows и ncols.

Има някои неща, които трябва да имате предвид, когато създавате мрежа с подплотове. Първият е параметърът sharex. Ако поставим подграфиците един върху друг, тогава е по-добре да имаме само оста x на долния график. Това може да се постигне с помощта на параметъра sharex.

Друг трик за по-добра четливост е функцията tight_layout. Може да се използва за регулиране на подложките между подплотите. В някои случаи подсюжетите са твърде тесни или дори се припокриват. Можем да предотвратим това с помощта на функцията tight_layout.

Нека направим пример с тези трикове.

# create a grid of subplots with 2 rows
fig, (ax1, ax2) = plt.subplots(
    nrows=2, ncols=1, 
    sharex=True,
    figsize=(12, 8)
)
# adjust the space between the subplots
fig.tight_layout(pad=2)
# create the first subplot
ax1.plot(df["Date"], df["Price"])
ax1.set_title("Price", fontsize=15)
# create the second subplot
ax2.plot(df["Date"], df["SalesQty"])
ax2.set_title("SalesQty", fontsize=15)
# customize x-ticks and y-ticks
ax1.tick_params(axis='both', which='major', labelsize=12)
ax2.tick_params(axis='both', which='major', labelsize=12)
# reduce the number of x-ticks
plt.xticks(np.arange(0, len(df), 15), fontsize=12)
plt.show()

Чувствайте се свободни да промените стойността на параметъра на подложката и да видите ефекта му върху фигурата.

Научихме 3 трика за персонализиране на визуализациите на Matplotlib. Това, което се показва на визуализацията, е критичната част, но как го показвате също е много важно. По този начин тези трикове определено ще ви помогнат да създадете по-информативни и функционални визуализации на данни.

Можете да станете член на Medium, за да отключите пълен достъп до моето писане, плюс останалата част от Medium. Ако вече сте, не забравяйте да се абонирате, ако искате да получавате имейл всеки път, когато публикувам нова статия.

Благодаря ви, че прочетохте. Моля, уведомете ме, ако имате отзиви.