You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib重复添加子图的DeprecationWarning警告解决方法咨询

解决Matplotlib子图复用警告的方法

这个警告其实很好搞定,咱们先弄明白它为啥会出现:

你连续三次调用了fig.add_subplot(111),这里的111代表的是「1行1列布局里的第1个位置」——说白了就是每次都在请求同一个位置的坐标轴。当前Matplotlib版本会复用之前创建的ax1实例,把它返回给ax2和ax3,但官方已经明确说了,未来版本会每次都创建全新的坐标轴实例,所以提前给你发了这个警告打预防针。

针对你的需求的最优解决方案

看你的代码,你只是想在同一个图表上画出Resistance_1和Support_1两条线,完全没必要创建多个坐标轴!直接用同一个ax1来绘制所有线条就可以了,这才是最合理的做法,还能顺便解决警告问题。

修改后的完整代码如下:

import matplotlib.dates as mdates
from matplotlib.dates import date2num
import matplotlib.pyplot as plt

Graph = pivot.copy()  # Make a copy of pivot
try:
    Graph.reset_index(inplace=True)
    Graph['date'] = Graph['date'].apply(date2num)
except:
    pass

fig = plt.figure()
ax1 = fig.add_subplot(111)  # 只创建一个坐标轴实例就够了

ax1.xaxis_date()
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
# 用同一个ax1绘制两条趋势线
ax1.plot(Graph.date, Graph['Resistance_1'], label='R1')
ax1.plot(Graph.date, Graph['Support_1'], label='S1')

# 加上图例,方便区分两条线
ax1.legend()

plt.show()

如果你确实需要多个重叠坐标轴的场景(比如双Y轴)

要是你以后真的需要在同一个位置创建多个独立的坐标轴(比如一个轴显示价格,另一个显示成交量),那可以给每个add_subplot加上唯一的label参数,强制Matplotlib创建新的实例,这样也能消除警告:

fig = plt.figure()
ax1 = fig.add_subplot(111, label='price_axis')
ax2 = fig.add_subplot(111, label='resistance_axis')
ax3 = fig.add_subplot(111, label='support_axis')

不过回到你的当前需求,第一种方法绝对是最简洁高效的选择~

内容的提问来源于stack exchange,提问作者Vishal Naik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:17:34