Введение
В этом практическом занятии вы научитесь создавать график нескольких временных рядов, демонстрирующий настройку оформления рамки графика, делений на осях и подписей делений, а также свойств линейного графика с использованием Matplotlib. График будет отображать цены на акции различных компаний за период в 32 года.
Советы по работе с ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортировать необходимые библиотеки
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.cbook import get_sample_data
import matplotlib.transforms as mtransforms
Загрузить данные о ценах на акции
with get_sample_data('Stocks.csv') as file:
stock_data = np.genfromtxt(
file, delimiter=',', names=True, dtype=None,
converters={0: lambda x: np.datetime64(x, 'D')}, skip_header=1)
Создать объект Figure и оси
fig, ax = plt.subplots(1, 1, figsize=(6, 8), layout='constrained')
Определить цвета, которые будут использоваться в графике
ax.set_prop_cycle(color=[
'#1f77b4', '#aec7e8', '#ff7f0e', '#ffbb78', '#2ca02c', '#98df8a',
'#d62728', '#ff9896', '#9467bd', '#c5b0d5', '#8c564b', '#c49c94',
'#e377c2', '#f7b6d2', '#7f7f7f', '#c7c7c7', '#bcbd22', '#dbdb8d',
'#17becf', '#9edae5'])
Установить имена и тикеры акций для построения графика
stocks_name = ['IBM', 'Apple', 'Microsoft', 'Xerox', 'Amazon', 'Dell',
'Alphabet', 'Adobe', 'S&P 500', 'NASDAQ']
stocks_ticker = ['IBM', 'AAPL', 'MSFT', 'XRX', 'AMZN', 'DELL', 'GOOGL',
'ADBE', 'GSPC', 'IXIC']
Ручной подбор позиций меток по вертикали для избежания наложений
y_offsets = {k: 0 for k in stocks_ticker}
y_offsets['IBM'] = 5
y_offsets['AAPL'] = -5
y_offsets['AMZN'] = -6
Построить каждую акцию отдельно с собственным цветом
for nn, column in enumerate(stocks_ticker):
## Plot each line separately with its own color.
## don't include any data with NaN.
good = np.nonzero(np.isfinite(stock_data[column]))
line, = ax.plot(stock_data['Date'][good], stock_data[column][good], lw=2.5)
## Add a text label to the right end of every line. Most of the code below
## is adding specific offsets y position because some labels overlapped.
y_pos = stock_data[column][-1]
## Use an offset transform, in points, for any text that needs to be nudged
## up or down.
offset = y_offsets[column] / 72
trans = mtransforms.ScaledTranslation(0, offset, fig.dpi_scale_trans)
trans = ax.transData + trans
## Again, make sure that all labels are large enough to be easily read
## by the viewer.
ax.text(np.datetime64('2022-10-01'), y_pos, stocks_name[nn],
color=line.get_color(), transform=trans)
Установить пределы по осям x и y, и добавить заголовок и сетку
ax.set_xlim(np.datetime64('1989-06-01'), np.datetime64('2023-01-01'))
fig.suptitle("Technology company stocks prices dollars (1990-2022)", ha="center")
ax.spines[:].set_visible(False)
ax.xaxis.tick_bottom()
ax.yaxis.tick_left()
ax.set_yscale('log')
ax.grid(True,'major', 'both', ls='--', lw=.5, c='k', alpha=.3)
ax.tick_params(axis='both', which='both', labelsize='large',
bottom=False, top=False, labelbottom=True,
left=False, right=False, labelleft=True)
Показать график
plt.show()
Резюме
В этом практическом занятии вы узнали, как создавать график нескольких временных рядов, демонстрирующий настройку оформления рамки графика, делений на осях, подписей делений и свойств линейного графика с использованием Matplotlib. Также вы узнали, как построить каждую акцию отдельно с собственным цветом, установить пределы по осям x и y и добавить заголовок и сетку.