我有几个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。
答案 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';这就是我得到的:
第3行不在那里,第1和第2行是。对于'line1opaque.png',我得到:
现在我们缺少第1行。