<p>通过使用<code>returnfig=True</code>参数获取matplotlib图形和轴对象,可以在烛台图表顶部覆盖一个绘图。返回两个轴:主轴和次轴。在以下基于您提供的示例的示例中,将使用主轴创建<em>噪波</em>线图</p>
<p>请注意<code>mpf.plot</code>返回一个图形,其中默认情况下x轴刻度由从零开始的整数单位组成(如熊猫条形图)。这是因为plotting函数用于可视化交易时间的数据,而不是包含许多非交易时间间隔的连续datetime变量。可以通过设置<code>show_nontrading=True</code>来更改此行为。在下面的示例中,我为两个备选方案提供了一个解决方案,使用pandas plotting函数来绘制直线,因为与matplotlib相比,它使用起来稍微方便一些:</p>
<pre><code>import pandas as pd # v 1.1.3
import matplotlib.pyplot as plt # v 3.3.2
import matplotlib.dates as mpdates
import mplfinance as mpf # v 0.12.7a4
from mplfinance.original_flavor import candlestick_ohlc
# Create sample data
dti = pd.date_range('2021-01-07', periods=5, freq='min')
minutely = pd.DataFrame({'Open':[36769.36, 36880.00, 36851.42,36922.19,37083.18],
'High':[36880.00, 36880.00, 36950.00, 37089.69, 37094.70],
'Low': [36760.00, 36817.64, 36810.03, 36922.13, 36565.49],
'Close':[36880.00, 36851.97, 36922.14, 37075.80, 36691.3]},
index=dti)
noise = pd.DataFrame({'Noise':[36779.36, 36870.00, 36881.42,36902.19,37103.18]},
index=dti)
# Create candlestick chart overlaid with a pandas line plot
fig, (ax1, ax2) = mpf.plot(minutely, type='candle', returnfig=True, figsize=(6,4))
noise.plot(ax=ax1, use_index=False);
# # Create same figure including non-trading hours, in this case the datetime
# # variable is used for the x-axis scale
# fig, (ax1, ax2) = mpf.plot(minutely, type='candle', show_nontrading=True,
# returnfig=True, figsize=(6,4))
# noise.plot(ax=ax1, x_compat=True);
</code></pre>
<p><a href="https://i.stack.imgur.com/1iW3J.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/1iW3J.png" alt="mpf_candlestick"/></a></p>
<br/>
<p>关于问题的第二部分,旧的<code>candlestick_ohlcv</code>函数的docstring表示<code>width</code>是以一天的分数表示的(对应于matplotlib日期单位)。示例数据仅跨越几分钟,但您设置了<code>width=0.6</code>(超过半天),这会产生非常宽的烛台,使绘图无法读取。设置<code>width=0.0003</code>似乎效果不错。另一件需要调整的事情是x记号,因为它们似乎被放置在一些随机的位置。以下是使用与上述相同数据的示例:</p>
<pre><code># Edit minutely dataframe for use with candlestick_ohlc function
minutely['Date'] = mpdates.date2num(minutely.index)
minutely = minutely[['Date', 'Open', 'High', 'Low', 'Close']]
# Create candlestick chart overlaid with a pandas line plot
plt.style.use('dark_background')
fig, ax = plt.subplots(figsize=(6,4))
candlestick_ohlc(ax, minutely.values, width=0.0003,
colorup='green', colordown='red', alpha=0.8)
noise.plot(ax=ax, x_compat=True)
# Set labels
ax.set_xlabel('Date')
ax.set_ylabel('Price')
# Create ticks that match the locations of the candlesticks and format labels
ax.set_xticks(minutely['Date'])
date_format = mpdates.DateFormatter('%H:%M\n%d-%m-%Y ')
ax.xaxis.set_major_formatter(date_format)
fig.autofmt_xdate(rotation=0, ha='center')
</code></pre>
<p><a href="https://i.stack.imgur.com/i0iT2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/i0iT2.png" alt="mpf_candlestick_old"/></a></p>
<br/>
<hr/>
<p>参考文献:<a href="https://stackoverflow.com/a/63347931/14148248">this answer by Daniel Goldfarb</a>(当前的<a href="https://pypi.org/project/mplfinance/" rel="nofollow noreferrer">mplfinance package</a>维护者)<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.plot.html" rel="nofollow noreferrer">pandas plotting function</a>和<a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/visualization.html#suppressing-tick-resolution-adjustment" rel="nofollow noreferrer">^{<cd8>}</a>参数,用于将pandas绘图日期单位转换为matplotlib日期单位</p>