matplotlib plt.show()只选择对象

时间:2011-11-21 15:57:53

标签: 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([ax1,ax2])
plt.show()

所以我希望像注释掉的声明一样,只显示ax1&示例图中的ax2。

2 个答案:

答案 0 :(得分:4)

您可以从当前轴的一组线中删除一些绘制的线:

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指出的那样,你也可以使一些线条看不见。但是,这个答案的方法可能更快,因为绘制的线数较少(如果这很重要)。

答案 1 :(得分:3)

不完全是。首先,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';这就是我得到的:

enter image description here 第3行不在那里,第1和第2行是。对于'line1opaque.png',我得到:

enter image description here

现在我们缺少第1行。