是否有可能以可预测的方式控制matplotlib?

时间:2016-02-09 18:52:20

标签: python matplotlib

以下代码对我来说绝对不可理解:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np

img=mpimg.imread('stinkbug.png')

imgplot = plt.imshow(img)
circle = plt.Circle((0, 0), radius=100, fc='y')

plt.figure(0)
#plt.show(imgplot)
plt.show(circle)

它显示两个数字,但不只有一个show()函数被调用。

虽然imgplot从未显示过,但它在图中显示了臭椿。

虽然显示了圆圈,但它不显示圆圈。

1 个答案:

答案 0 :(得分:7)

您告诉matplotlib执行以下操作:

  1. 加载图片(...到目前为止一直很好)
  2. 创建一个显示图像的图形(默认情况下为图1)(...到目前为止一直很好)
  3. 创建代表圆圈的补丁对象。这与任何轴或任何可以绘制的轴无关。
  4. 创建一个空图0.为什么?我们可能永远不会知道。
  5. 以补丁作为参数调用plt.show()。因为matplotlib很好,它会忽略这个参数,只显示预测的两个数字。
  6. 一些笔记

    1. 补丁对象只是形状的表示。你必须在某处绘制它们才能使它们起作用。
    2. 如果您不处于交互模式,
    3. plt.show()只会显示所有数字。
    4. 解决方案

      鉴于这一切,我认为你正在努力做到这一点:

      import matplotlib.pyplot as plt
      import matplotlib.image as mpimg
      import numpy as np
      
      img = mpimg.imread('stinkbug.png')
      circle = plt.Circle((0, 0), radius=100, fc='y')
      
      fig, ax = plt.subplots()
      ax.imshow(img)
      ax.add_artist(circle)
      fig.show()
      

      subplots为您创建数字和轴。然后,您可以使用ax.imshow显示图片,并ax.add_artist显示圈子。在这种情况下,fig.show()plt.show()相同。