Введение
При визуализации финансовых данных крайне важно правильно форматировать оси с использованием денежных знаков. Matplotlib - это мощная библиотека Python для создания визуализаций, но по умолчанию она не отображает денежные знаки на осях.
В этом практическом занятии (лабораторной работе) мы научимся настраивать график в Matplotlib так, чтобы на метках оси Y отображались доллары. Этот навык ценен при работе с финансовыми данными, продажами, бюджетами или любыми другими наборами данных, которые требуют форматирования в денежном формате.
Советы по виртуальной машине (VM)
После завершения запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Проверка операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с какими-либо проблемами во время практического занятия, не стесняйтесь обращаться к Labby. Пожалуйста, оставьте отзыв после занятия, и мы оперативно решим любые проблемы для вас.
Настройка библиотек и создание примерных данных
В этом первом шаге мы импортируем необходимые библиотеки и создадим примерные финансовые данные для нашего графика. Нам нужно импортировать как Matplotlib для визуализации, так и NumPy для генерации данных.
В первой ячейке вашего блокнота введите и запустите следующий код для импорта требуемых библиотек:
## Import necessary libraries
import matplotlib.pyplot as plt
import numpy as np
## Display plots inline in the notebook
%matplotlib inline
print("Libraries imported successfully!")
После запуска кода (нажмите Shift+Enter) вы должны увидеть следующий вывод:
Libraries imported successfully!

Теперь давайте создадим некоторые примерные финансовые данные для визуализации. Финансовые данные часто представляют значения в течение времени, поэтому мы создадим простой набор данных, который может представлять ежедневную выручку за определенный период.
В новой ячейке добавьте и запустите следующий код:
## Set a random seed for reproducibility
np.random.seed(42)
## Generate financial data: 30 days of revenue data
days = np.arange(1, 31)
daily_revenue = np.random.uniform(low=1000, high=5000, size=30)
print("Sample of daily revenue data (first 5 days):")
for i in range(5):
print(f"Day {days[i]}: ${daily_revenue[i]:.2f}")
После запуска этого кода вы увидите данные о выручке за первые 5 дней нашего примера:
Sample of daily revenue data (first 5 days):
Day 1: $3745.40
Day 2: $3992.60
Day 3: $2827.45
Day 4: $4137.54
Day 5: $1579.63
Эти примерные данные представляют ежедневные значения выручки от $1000 до $5000 за период в 30 дней. Мы будем использовать эти данные для создания нашего графика на следующем шаге.
Создание базового финансового графика
Теперь, когда наши данные готовы, давайте создадим базовый график для визуализации ежедневной выручки. Мы начнем с простого линейного графика, который покажет тенденцию выручки за 30 - дневный период.
В новой ячейке вашего блокнота добавьте и запустите следующий код:
## Create a figure and axes
fig, ax = plt.subplots(figsize=(10, 6))
## Plot the daily revenue data
ax.plot(days, daily_revenue, marker='o', linestyle='-', color='blue', linewidth=2, markersize=6)
## Add labels and title
ax.set_xlabel('Day', fontsize=12)
ax.set_ylabel('Revenue', fontsize=12)
ax.set_title('Daily Revenue Over 30 Days', fontsize=14, fontweight='bold')
## Add grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Display the plot
plt.tight_layout()
plt.show()
print("Basic plot created successfully!")
После запуска этого кода вы должны увидеть линейный график, показывающий тенденцию ежедневной выручки. Он должен выглядеть приблизительно так (фактические значения могут немного отличаться из - за случайной генерации):

Давайте разберем, что мы сделали в этом коде:
fig, ax = plt.subplots(figsize=(10, 6))- Создали фигуру и оси размером 10×6 дюймовax.plot(days, daily_revenue, ...)- Построили наш график с днями по оси X и выручкой по оси Yax.set_xlabel(),ax.set_ylabel(),ax.set_title()- Добавили подписи и заголовок к нашему графикуax.grid()- Добавили сетку, чтобы данные были легче читатьplt.tight_layout()- Подкрепили отступы, чтобы все было расположено красивоplt.show()- Отобразили график
Обратите внимание, что на оси Y в настоящее время отображаются простые числа без знаков доллара. На следующем шаге мы изменим наш график, чтобы на оси Y отображался правильный денежный формат.
Форматирование меток оси Y с использованием знаков доллара
Теперь, когда у нас есть базовый график, давайте отформатируем метки оси Y так, чтобы они отображали знаки доллара. Это сделает наши финансовые данные более читаемыми и профессионально выглядящими.
Для форматирования делений на оси Y мы будем использовать модуль ticker библиотеки Matplotlib, который предоставляет различные варианты форматирования. В частности, мы воспользуемся классом StrMethodFormatter для создания настраиваемого форматтера для нашей оси Y.
В новой ячейке вашего блокнота добавьте и запустите следующий код:
## Import the necessary module for formatting
import matplotlib.ticker as ticker
## Create a figure and axes
fig, ax = plt.subplots(figsize=(10, 6))
## Plot the daily revenue data
ax.plot(days, daily_revenue, marker='o', linestyle='-', color='blue', linewidth=2, markersize=6)
## Format y-axis with dollar signs
formatter = ticker.StrMethodFormatter('${x:,.2f}')
ax.yaxis.set_major_formatter(formatter)
## Add labels and title
ax.set_xlabel('Day', fontsize=12)
ax.set_ylabel('Revenue ($)', fontsize=12)
ax.set_title('Daily Revenue Over 30 Days', fontsize=14, fontweight='bold')
## Add grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Display the plot
plt.tight_layout()
plt.show()
print("Plot with dollar-formatted y-axis created!")
После запуска этого кода вы должны увидеть новый график с знаками доллара на метках оси Y.
Давайте объясним ключевую часть этого кода:
formatter = ticker.StrMethodFormatter('${x:,.2f}')
ax.yaxis.set_major_formatter(formatter)
Вот что делает эта строка форматирования:
$- Добавляет знак доллара в начале каждой метки{x:,.2f}- Форматирует число следующим образом:,- Использует запятую как разделитель тысяч (например, 1 000 вместо 1000).2f- Округляет число до двух знаков после запятой (например, $1 234,56)
Этот форматтер применяется ко всем основным делениям на оси Y. Обратите внимание, как график теперь четко показывает, что значения даны в долларах, что делает его гораздо более подходящим для визуализации финансовых данных.
Улучшение графика для более эффективной визуализации финансовых данных
Теперь, когда у нас есть базовое форматирование денежных значений, давайте дальнейшим образом улучшим наш график, чтобы он стал более полезным для анализа финансовых данных. Мы внесем несколько усовершенствований:
- Горизонтальную линию, показывающую среднюю ежедневную выручку
- Аннотации, выделяющие дни с максимальной и минимальной выручкой
- Настроенные параметры делений для лучшей читаемости
- Более описательный заголовок и легенду
В новой ячейке вашего блокнота добавьте и запустите следующий код:
## Import the necessary module for formatting
import matplotlib.ticker as ticker
## Create a figure and axes
fig, ax = plt.subplots(figsize=(12, 7))
## Plot the daily revenue data
ax.plot(days, daily_revenue, marker='o', linestyle='-', color='blue',
linewidth=2, markersize=6, label='Daily Revenue')
## Calculate statistics
avg_revenue = np.mean(daily_revenue)
max_revenue = np.max(daily_revenue)
min_revenue = np.min(daily_revenue)
max_day = days[np.argmax(daily_revenue)]
min_day = days[np.argmin(daily_revenue)]
## Add a horizontal line for average revenue
ax.axhline(y=avg_revenue, color='r', linestyle='--', alpha=0.7,
label=f'Average Revenue: ${avg_revenue:.2f}')
## Format y-axis with dollar signs
formatter = ticker.StrMethodFormatter('${x:,.2f}')
ax.yaxis.set_major_formatter(formatter)
## Customize tick parameters
ax.tick_params(axis='both', which='major', labelsize=10)
ax.yaxis.set_major_locator(ticker.MaxNLocator(nbins=10))
ax.xaxis.set_major_locator(ticker.MultipleLocator(base=5))
## Add annotations for max and min revenue
ax.annotate(f'Max: ${max_revenue:.2f}', xy=(max_day, max_revenue),
xytext=(max_day+1, max_revenue+200),
arrowprops=dict(facecolor='black', shrink=0.05, width=1.5))
ax.annotate(f'Min: ${min_revenue:.2f}', xy=(min_day, min_revenue),
xytext=(min_day+1, min_revenue-200),
arrowprops=dict(facecolor='black', shrink=0.05, width=1.5))
## Add labels and title
ax.set_xlabel('Day of Month', fontsize=12)
ax.set_ylabel('Revenue ($)', fontsize=12)
ax.set_title('Daily Revenue Analysis - 30 Day Period', fontsize=14, fontweight='bold')
## Set x-axis limits to show a bit of padding
ax.set_xlim(0, 31)
## Add grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Add legend
ax.legend(loc='upper right', fontsize=10)
## Display the plot
plt.tight_layout()
plt.show()
print("Enhanced financial plot created successfully!")
После запуска этого кода вы должны увидеть гораздо более информативный график с:
- Форматированием значений на оси Y с использованием знака доллара
- Горизонтальной красной пунктирной линией, показывающей среднюю выручку
- Аннотациями, указывающими на дни с максимальной и минимальной выручкой
- Более четкими делениями с лучшим интервалом
- Легендой, показывающей, что представляет каждый элемент
Давайте объясним некоторые новые элементы:
ax.axhline()- Добавляет горизонтальную линию на заданном значении оси Y (в данном случае - средняя выручка)ax.yaxis.set_major_locator()- Управляет количеством делений на оси Yax.xaxis.set_major_locator()- Устанавливает, чтобы на оси X деления отображались с интервалом в 5 днейax.annotate()- Добавляет текстовые аннотации с стрелками, указывающими на конкретные точки данныхax.legend()- Добавляет легенду, объясняющую различные элементы на графике
Эти усовершенствования делают график гораздо более полезным для финансового анализа, выделяя ключевые статистические показатели и упрощая интерпретацию данных.
Сохранение графика и создание переиспользуемой функции
На этом последнем этапе мы создадим переиспользуемую функцию для генерации графиков с форматированием денежных значений и сохраним нашу визуализацию в файл. Такой подход позволит легко применять то же форматирование к разным финансовым наборам данных в будущем.
В новой ячейке вашего блокнота добавьте и запустите следующий код:
def create_currency_plot(x_data, y_data, title='Financial Data',
xlabel='X-Axis', ylabel='Amount ($)',
filename=None, show_stats=True):
"""
Create a plot with currency formatting on the y-axis.
Parameters:
-----------
x_data : array-like
Data for the x-axis
y_data : array-like
Data for the y-axis (currency values)
title : str
Title of the plot
xlabel : str
Label for the x-axis
ylabel : str
Label for the y-axis
filename : str, optional
If provided, save the plot to this filename
show_stats : bool
Whether to show statistics (average, min, max)
Returns:
--------
fig, ax : tuple
The figure and axes objects
"""
## Import the necessary module for formatting
import matplotlib.ticker as ticker
## Create a figure and axes
fig, ax = plt.subplots(figsize=(12, 7))
## Plot the data
ax.plot(x_data, y_data, marker='o', linestyle='-', color='blue',
linewidth=2, markersize=6, label='Data')
if show_stats:
## Calculate statistics
avg_value = np.mean(y_data)
max_value = np.max(y_data)
min_value = np.min(y_data)
max_x = x_data[np.argmax(y_data)]
min_x = x_data[np.argmin(y_data)]
## Add a horizontal line for average value
ax.axhline(y=avg_value, color='r', linestyle='--', alpha=0.7,
label=f'Average: ${avg_value:.2f}')
## Add annotations for max and min values
ax.annotate(f'Max: ${max_value:.2f}', xy=(max_x, max_value),
xytext=(max_x+1, max_value+200),
arrowprops=dict(facecolor='black', shrink=0.05, width=1.5))
ax.annotate(f'Min: ${min_value:.2f}', xy=(min_x, min_value),
xytext=(min_x+1, min_value-200),
arrowprops=dict(facecolor='black', shrink=0.05, width=1.5))
## Format y-axis with dollar signs
formatter = ticker.StrMethodFormatter('${x:,.2f}')
ax.yaxis.set_major_formatter(formatter)
## Customize tick parameters
ax.tick_params(axis='both', which='major', labelsize=10)
## Add labels and title
ax.set_xlabel(xlabel, fontsize=12)
ax.set_ylabel(ylabel, fontsize=12)
ax.set_title(title, fontsize=14, fontweight='bold')
## Add grid for better readability
ax.grid(True, linestyle='--', alpha=0.7)
## Add legend
if show_stats:
ax.legend(loc='best', fontsize=10)
## Adjust layout
plt.tight_layout()
## Save the plot if filename is provided
if filename:
plt.savefig(filename, dpi=300, bbox_inches='tight')
print(f"Plot saved as '{filename}'")
return fig, ax
## Use our function to create and save a plot
fig, ax = create_currency_plot(
days,
daily_revenue,
title='Monthly Revenue Report',
xlabel='Day of Month',
ylabel='Daily Revenue ($)',
filename='revenue_plot.png'
)
## Display the plot
plt.show()
print("Function created and plot saved successfully!")
После запуска этого кода вы должны увидеть:
- График, аналогичный тому, который мы создали на предыдущем этапе, но сгенерированный с использованием нашей пользовательской функции.
- Сообщение, подтверждающее, что график был сохранен в файл с именем
revenue_plot.png.
Созданная нами функция:
- Принимает данные для осей X и Y.
- Позволяет настраивать метки и заголовок.
- Имеет возможность сохранить график в файл.
- Может отображать или скрывать статистические показатели, такие как среднее, минимальное и максимальное значения.
- Возвращает объекты фигуры и осей для дальнейшей настройки при необходимости.
Эта переиспользуемая функция позволяет легко создавать финансовые графики с единообразным форматированием в будущем. Вы можете просто вызвать эту функцию с разными наборами данных, и она автоматически обработает все форматирование денежных значений и статистические аннотации.
Чтобы убедиться, что наш график был сохранен правильно, проверим, существует ли файл:
import os
if os.path.exists('revenue_plot.png'):
print("Plot file exists! Size:", os.path.getsize('revenue_plot.png'), "bytes")
else:
print("Plot file was not saved correctly.")
Вы должны увидеть сообщение, подтверждающее существование файла и его размер.
Поздравляем! Вы успешно научились форматировать графики с использованием знаков доллара и создавать профессионально выглядящие финансовые визуализации с помощью Matplotlib.
Резюме
В этом практическом занятии (лабораторной работе) мы научились создавать финансовые графики с правильным форматированием денежных значений с использованием библиотеки Matplotlib. Мы рассмотрели несколько важных концепций:
- Генерацию и работу с примерными финансовыми данными.
- Создание базовых графиков с помощью Matplotlib.
- Форматирование меток на оси Y с использованием знака доллара с помощью класса
StrMethodFormatter. - Улучшение графиков с использованием статистических данных, аннотаций и улучшения стиля.
- Создание переиспользуемой функции для генерации графиков с единообразным форматированием денежных значений.
Эти навыки являются обязательными для любого человека, работающего с визуализацией финансовых данных, так как они позволяют создавать профессиональные и информативные диаграммы, которые ясно передают денежные значения.
Техники, которые вы узнали, можно применить к различным финансовым наборам данных, таким как:
- Отчеты о продажах и выручке.
- Анализ бюджета.
- Отслеживание инвестиционного результата.
- Анализ затрат.
- Отслеживание расходов.
Правильное форматирование осей с использованием денежных символов делает ваши визуализации более интуитивно понятными и профессиональными, повышая эффективность передачи данных.