plotfile 没有使用正确的轴,注释问题

plotfile not using correct axes, annotation problem

我在使用 matplotlibs plotfile 函数时遇到了一个奇怪的行为。

我想注释文件的绘图,text.txt,其中包含:

x
0
1
1
2
3

使用以下代码:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
annot = ax.annotate("Test", xy=(1,1))
plt.plotfile('test.txt', newfig = False)
plt.show()

这让我得到了以下看起来很奇怪的图,轴标签到处都是,注释在错误的地方(相对于我的数据):

然而,当我使用

fig = plt.figure()
ax = fig.add_subplot(111)

而不是

fig, ax = plt.subplots()

我得到了我想要的地块折旧警告:

MatplotlibDeprecationWarning: Adding an axes using the same arguments as a previous axes currently reuses the earlier instance.  In a future version, a new instance will always be created and returned.  Meanwhile, this warning can be suppressed, and the future behavior ensured, by passing a unique label to each axes instance.

所以我在想,在一种情况下,plt.plotfile 使用以前也用于制作注释的轴,但这会给我一个警告,而在另一种情况下,它会创建一个新轴实例(所以没有警告)但也制作了一个带有两个重叠轴的奇怪情节。

现在我想知道两件事:

  1. 为什么我声明图形和坐标轴的方式不同,而根据 它们应该可以互换?
  2. 如何告诉 plotfile 要绘制到哪个轴并避免折旧警告并将其绘制到正确的轴?我假设这不仅仅是绘图文件的问题,而是所有未在轴上直接调用的绘图类型的问题(不像 ax.scatter, ax.plot,...我不能调用 ax.plotfile )

plotfile 是直接绘制文件的便利函数。这意味着它假设不存在先前的轴并且 creates a new one。如果确实已经存在轴,这可能会导致有趣的行为。不过,您仍然可以按预期方式使用它,

import matplotlib.pyplot as plt

plt.plotfile('test.txt')
annot = plt.annotate("Test", xy=(1,1))
plt.show()

然而,正如the documentation所述,

Note: plotfile is intended as a convenience for quickly plotting data from flat files; it is not intended as an alternative interface to general plotting with pyplot or matplotlib.

所以一旦你想对图形或轴进行重大更改,最好不要依赖plotfile

可以实现类似的功能
import numpy as np
import matplotlib.pyplot as plt

plt.plot(np.loadtxt('test.txt', skiprows=1))
annot = plt.annotate("Test", xy=(1,1))
plt.show()

这与面向对象的方法完全兼容,

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
annot = ax.annotate("Test", xy=(1,1))
ax.plot(np.loadtxt('test.txt', skiprows=1))

plt.show()