Matplotlib:使用与前一个轴相同的参数添加轴

Nic*_*ckj 31 python matplotlib

我想在两个不同的子图中绘制数据.绘图后,我想回到第一个子图并在其中绘制一个额外的数据集.但是,当我这样做时,我收到此警告:

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)
Run Code Online (Sandbox Code Playgroud)

有关如何避免此警告的任何想法?我使用matplotlib 2.1.0.看起来像这里一样的问题

Dav*_*idG 19

这是一个很好的例子,示出了使用受益matplotlib面向对象的API.

import numpy as np
import matplotlib.pyplot as plt

# Generate random data
data = np.random.rand(100)

# Plot in different subplots
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.plot(data)

ax2.plot(data)

ax1.plot(data+1)

plt.show()
Run Code Online (Sandbox Code Playgroud)

注意:变量名称以小写字母开头,data = ...而不是Data = ...PEP8,这更加pythonic

  • @Nir 我不想清除无花果,并在旧数据之上绘制新数据。 (3认同)
  • fig,(ax1,ax2)= plt.subplots(1,2)创建一个新图形,如果要避免继续打开新图形该怎么办? (2认同)

Imp*_*est 12

请注意,在这种情况下,警告是误报。理想情况下,它不应在您plt.subplot(..)用来重新激活先前创建的子图的情况下触发。

出现此警告的原因是plt.subplot并且fig.add_subplot()在内部采用相同的代码路径。警告是针对后者的,而不是针对前者的。

要阅读有关此内容的更多信息,请参阅问题 12513。长话短说,人们正在研究它,但将这两个功能解耦并不像最初想象的那么容易。目前,如果警告是由plt.subplot().


Jam*_*mes 9

使用将在当前图形中plt.subplot(1,2,1) 创建一个新轴。弃用警告表明,在将来的发行版中,当您再次调用它时,它将不会抓住先前创建的轴,而是会覆盖它。

您可以通过将引用分配给变量来保存对轴的第一个实例的引用。

plt.figure()
# keep a reference to the first axis
ax1 = plt.subplot(1,2,1)
ax1.plot(Data)

# and a reference to the second axis
ax2 = plt.subplot(1,2,2)
ax2.plot(Data)

# reuse the first axis
ax1.plot(Data+1)
Run Code Online (Sandbox Code Playgroud)