Как получить экземпляр топора matplotlib для построения?

Мне нужно сделать график свечи (что-то вроде этого), используя некоторые данные по акциям. Для этого я хочу использовать функцию matplotlib.finance.candlestick (). Для этой функции мне нужно предоставить кавычки и "экземпляр Axes для построения графика". Я создал несколько примеров цитат следующим образом:

quotes = [(1, 5, 6, 7, 4), (2, 6, 9, 9, 6), (3, 9, 8, 10, 8), (4, 8, 8, 9, 8), (5, 8, 11, 13, 7)]

Теперь мне также нужен экземпляр Axes, в котором я немного растерялся. Я создал графики перед использованием matplotlib.pyplot. Я думаю, что теперь мне нужно что-то делать с matplotlib.axes, но я не уверен, что именно.

Может ли кто-нибудь помочь мне немного здесь? Все советы приветствуются!

3 ответа

Решение

Использовать gca ("получить текущие оси") вспомогательная функция:

ax = plt.gca()

Пример:

import matplotlib.pyplot as plt
import matplotlib.finance
quotes = [(1, 5, 6, 7, 4), (2, 6, 9, 9, 6), (3, 9, 8, 10, 8), (4, 8, 8, 9, 8), (5, 8, 11, 13, 7)]
ax = plt.gca()
h = matplotlib.finance.candlestick(ax, quotes)
plt.show()

Вы также можете

fig, ax = plt.subplots()  #create figure and axes
candlestick(ax, quotes, ...)

или же

candlestick(plt.gca(), quotes) #get the axis when calling the function

Первый дает вам больше гибкости. Второе намного проще, если вы хотите построить подсвечник.

Для каждого экземпляра фигуры определены оси. Как упоминалось в других ответах,plt.gca()возвращает текущий экземпляр Axes. Чтобы получить другие экземпляры осей, определенные на рисунке, вы можете проверить список осей на рисунке через свойство рисунка.

      import matplotlib.pyplot as plt

plt.plot(range(3))
plt.gcf().axes     # [<Axes: >]


fig, axs = plt.subplots(1, 3)
fig.axes   # [<Axes: >, <Axes: >, <Axes: >]

Это возвращает список, поэтому вы можете просто проиндексировать его для нужных вам осей.


Это особенно полезно, если вы создаете график, используя библиотеку, которая явно не возвращает экземпляр Axes. Пока указанная библиотека использует matplotlib в фоновом режиме, каждый график имеет экземпляр рисунка, через который можно получить доступ к любым осям в нем.

Например, если вы строите сезонное разложение, используяstatsmodels, возвращаемый объект является объектом рисунка matplotlib. Чтобы изменить что-то в любом из подсюжетов, вы можете использоватьaxesсвойство. Например, следующий код уменьшает размер маркера на остаточном графике разложения.

      import pandas as pd
from statsmodels.tsa.seasonal import seasonal_decompose
# plot seasonal decomposition
data = pd.Series(range(100), index=pd.date_range('2020', periods=100, freq='D'))
fig = seasonal_decompose(data).plot()

fig.axes  # get Axes list
# [<Axes: >, <Axes: ylabel='Trend'>, <Axes: ylabel='Seasonal'>, <Axes: ylabel='Resid'>]

ax = fig.axes[3]               # last subplot
ax.lines[0].set_markersize(3)  # make marker size smaller on the last subplot

Другие вопросы по тегам