Python matplotlib plt.show()仅显示选定对象

Python matplotlib plt.show()仅显示选定对象,python,matplotlib,Python,Matplotlib,我有几个plt.plot实例,我只想plt.show()某些对象。下面是一些代码: import matplotlib.pyplot as plt ax1 = plt.plot(range(5),range(5)) ax2 = plt.plot([x+1 for x in range(5)],[x+1 for x in range(5)]) ax3 = plt.plot([x+2 for x in range(5)],[x+2 for x in range(5)]) #plt.show([a

我有几个
plt.plot
实例,我只想
plt.show()
某些对象。下面是一些代码:

import matplotlib.pyplot as plt

ax1 = plt.plot(range(5),range(5))
ax2 = plt.plot([x+1 for x in range(5)],[x+1 for x in range(5)])
ax3 = plt.plot([x+2 for x in range(5)],[x+2 for x in range(5)])

#plt.show([ax1,ax2])
plt.show()

因此,我希望类似注释掉的语句,在示例图中仅显示ax1和ax2。

不完全如此。首先,
plt.plot
调用不返回轴,它返回Line2D对象列表,每绘制一条线一个。可以使用Matplotlib的OO接口为每个绘图创建单独的轴,然后有选择地将这些轴添加为子绘图等。有许多不同的方法可以有选择地显示绘图

但对于您的示例,可以利用Line2D的alpha值(即它的不透明程度)使任何一条线不可见。下面是您的示例的修改版本:

import matplotlib.pyplot as plt

line1 = plt.plot(range(5),range(5))
line2 = plt.plot([x+1 for x in range(5)],[x+1 for x in range(5)])
line3 = plt.plot([x+2 for x in range(5)],[x+2 for x in range(5)])
print line3, " see I'm a list of lines"
print line3[0].get_alpha()
line3[0].set_alpha(0) # make complete opaque

#plt.show([ax1,ax2])
plt.gcf().savefig('line3opaque.png')
line3[0].set_alpha(1) # make visible
line1[0].set_alpha(0) # make opaque
plt.gcf().savefig('line1opaque.png')
plt.show()
我保存的第一个图形是“line3opaque.png”;这就是我得到的:

第3行不在那里,第1行和第2行在那里。对于“line1opaque.png”,我得到:


现在我们少了第1行

可以从当前轴的线集中删除一些打印线:

axes = plt.gca()  # Get current axes
axes.lines.remove(ax2[0])  # Removes the (first and only) line created in ax2
plt.draw()  # Updates the graph (in interactive mode)
如果你想把它放回去,你也可以这样做

axes.lines.append(ax2[0])  # Puts the line back (the drawing order is changed, here)
如果以后需要将当前图形线放回,也可以保存这些图形线:

all_lines = list(axes.lines)  # Copy
# ...
axes.lines[:] = all_lines  # All lines put back
关键的一点是,每个
plot()
命令都会向当前轴添加一条线并绘制它(在交互模式下)。因此,您可以删除已绘制的线(如本答案中所示)


正如Yann所指出的,您还可以使某些线条不可见。但是,这个答案中的方法可能更快,因为要画的线更少(如果这很重要)。

谢谢,速度是个问题,所以我更喜欢这种方法。我真的觉得这更简单,我错过了一些东西obvious@Anake:谢谢。所有这一切背后的原理是绘制一些东西:一个
plot()
调用将线等对象添加到Matplotlib轴,并且大部分忘记它们来自何处。一旦添加了它们,删除它们必然需要几个步骤。