0

我正在尝试绘制 5 个图表,一张一张地用mplfinance.

这有效:

for coin in coins:
    mpf.plot(df_coins[coin], title=coin, type='line', volume=True, show_nontrading=True)

然而,在我的 Python Notebook 单元格输出中,每个图都是一个单独的图像。并且为每个图像重复 x 轴标记。

我尝试制作一个包含多个子图/轴的图形,并将一个图表绘制到每个轴上:

from matplotlib import pyplot as plt

N = len(df_coins)
fig, axes = plt.subplots(N, figsize=(20, 5*N), sharex=True)

for i, ((coin, df), ax) in zip(enumerate(df_coins.items()), axes):
    mpf.plot(df, ax=ax, title=coin, type='line', volume=True, show_nontrading=True)

这将显示正确尺寸的子图,但它们没有填充数据。轴标记为从 0.0 到 1.0,并且标题未出现。

我错过了什么?

4

2 回答 2

1

子图有两种方法。一种是用 mplfinance 对象建立一个图形。另一种方法是使用您采用的 matplotlib 子图来放置它。

y财务数据

import matplotlib.pyplot as plt
import mplfinance as mpf
import yfinance as yf

tickers = ['AAPL','GOOG','TSLA']
data = yf.download(tickers, start="2021-01-01", end="2021-03-01", group_by='ticker')

aapl = data[('AAPL',)]
goog = data[('GOOG',)]
tsla = data[('TSLA',)]

财务

fig = mpf.figure(style='yahoo', figsize=(12,9))
#fig.subplots_adjust(hspace=0.3)
ax1 = fig.add_subplot(3,1,1, sharex=ax3)
ax2 = fig.add_subplot(3,1,2, sharex=ax3)
ax3 = fig.add_subplot(3,1,3)

mpf.plot(aapl, type='line', ax=ax1, axtitle='AAPL', xrotation=0)
mpf.plot(goog, type='line', ax=ax2, axtitle='GOOG', xrotation=0)
mpf.plot(tsla, type='line', ax=ax3, axtitle='TSLA', xrotation=0)
ax1.set_xticklabels([])
ax2.set_xticklabels([])

matplotlib

N = len(tickers)
fig, axes = plt.subplots(N, figsize=(20, 5*N), sharex=True)

for df,t,ax in zip([aapl,goog,tsla], tickers, axes):
    mpf.plot(df, ax=ax, axtitle=t, type='line', show_nontrading=True)# volume=True 

于 2021-10-30T08:02:12.100 回答
1

除了@r-beginners 提到的技术之外,在所有绘图共享相同 x-axis 的情况下,还有另一种技术可能对您有用。也就是使用mpf.make_addplot().

aps = []
for coin in coins[1:]:
    aps.append(mpf.make_addplot(df_coins[coin]['Close'], title=coin, type='line'))

coin = coins[0]
mpf.plot(df_coins[coin],axtitle=coin,type='line',volume=True,show_nontrading=True,addplot=aps)

如果你选择做type='candle'而不是'line',那么改变

df_coins[coin]['Close']

简单地

df_coins[coin]
于 2021-10-30T23:37:07.430 回答