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
相关产品推荐
相关产品推荐

