我想用两个不同的子图来绘制数据。绘图后,我想返回到第一个子图,并在其中绘制一个额外的数据集。但是,当我这样做的时候,我得到了这样的警告:
MatplotlibDeprecationWarning:使用与前一个轴相同的参数添加轴当前会重用前一个示例。在未来的版本中,将始终创建并返回新示例。同时,通过向每个轴示例传递唯一的标签,可以抑制此警告,并确保未来的行为。warnings.warn(message,mplDeprecation,stacklevel=1)
我可以用一段简单的代码来重现它:
import matplotlib.pyplot as plt
import numpy as np
# Generate random data
data = np.random.rand(100)
# Plot in different subplots
plt.figure()
plt.subplot(1, 2, 1)
plt.plot(data)
plt.subplot(1, 2, 2)
plt.plot(data)
plt.subplot(1, 2, 1) # Warning occurs here
plt.plot(data + 1)
有什么办法可以避免这个警告吗?我使用matplotlib 2.1.0。看起来像here一样的问题
6条答案
按热度按时间yyyllmsg1#
这是一个很好的例子,展示了使用
matplotlib
的object oriented API的好处。data = ...
而不是Data = ...
参见PEP8dm7nw8vv2#
请注意,在这种情况下,警告是误报。在使用
plt.subplot(..)
重新激活先前创建的子图的情况下,理想情况下不应触发该选项。出现此警告的原因是
plt.subplot
和fig.add_subplot()
在内部采用相同的代码路径。警告是针对后者,而不是前者。要了解更多信息,请参阅issues 12513。长话短说,人们正在致力于此,但要将这两个功能解耦并不像最初想象的那么容易。目前,如果
plt.subplot()
触发了警告,您可以忽略它。pes8fvy93#
使用
plt.subplot(1,2,1)
在当前图形中创建一个新轴。弃用警告表明,在未来的版本中,当您第二次调用它时,它不会抓取先前创建的轴,而是会覆盖它。可以通过将轴的第一个示例赋给变量来保存对该示例的引用。
llmtgqce4#
我也有同样的问题。我曾经有以下代码引发了警告:
(note变量
Image
只是我保存为numpy数组的图像)我解决了这个问题,修改如下:
wooyq4lh5#
当您多次创建相同的轴对象时,将出现错误。在您的示例中,首先创建两个subplot对象(使用方法plt.subplot)。
python自动将上次创建的轴设置为默认值。轴仅表示不带数据的图的框架。这就是为什么你可以执行plt.plot(data)。方法plot(data)打印轴对象中的一些数据。当你尝试在同一个图中打印新的数据时,你不能只使用plt.subplot(2,1,2),因为python会在默认情况下尝试创建一个新的轴对象。所以你要做的是:将每个子图指定给一个变量。
然后选择您要打印数据的“帧”:
如果您有兴趣绘制更多图形(例如5)在一个图形中,首先创建一个图形。您的数据存储在PandasDataFrame中,并且您在列表中为每个列创建一个新的轴元素。然后循环遍历列表,在每个轴元素中绘制数据并选择属性
csga3l586#
我们可以为每个轴添加唯一的标签来绘制它。
ax = plt.subplot(label='testlabel')