【发布时间】:2011-02-22 18:14:29
【问题描述】:
我有一组数据,我正在使用 pylab 绘制这些数据,这些数据会随着时间的推移而变化。
我可以将每个帧存储为 .png 并使用 iMovie 将它们放在一起,但我想在绘图中添加轨迹以说明先前时间点的位置。
我认为可以做到这一点的一种方法是在图上设置 plt.hold(True),然后在数据顶部绘制一个轴大小的白色块,(透明度值)alpha
有人知道我该怎么做吗? axisbg 似乎不起作用。
非常感谢,
汉娜
【问题讨论】:
我有一组数据,我正在使用 pylab 绘制这些数据,这些数据会随着时间的推移而变化。
我可以将每个帧存储为 .png 并使用 iMovie 将它们放在一起,但我想在绘图中添加轨迹以说明先前时间点的位置。
我认为可以做到这一点的一种方法是在图上设置 plt.hold(True),然后在数据顶部绘制一个轴大小的白色块,(透明度值)alpha
有人知道我该怎么做吗? axisbg 似乎不起作用。
非常感谢,
汉娜
【问题讨论】:
在一系列绘图上实现渐变轨迹的另一种方法是使用 .set_alpha() 方法更改绘图项的 alpha 值,前提是它适用于您正在使用的特定绘图方法。
您可以通过将您正在使用的特定绘图函数的输出(即绘图的“句柄”)附加到列表中来做到这一点。然后,在每个新绘图之前,您可以找到并减少该列表中每个现有项目的 alpha 值。
在以下示例中,使用 .remove() 从图中删除 alpha 值下降超过某个点的项目,然后从列表中删除它们的句柄。
import pylab as pl
#Set a decay constant; create a list to store plot handles; create figure.
DECAY = 2.0
plot_handles = []
pl.figure()
#Specific to this example: store x values for plotting sinusoid function
x_axis=pl.linspace( 0 , 2 * pl.pi , 100 )
#Specific to this example: cycle 50 times through 16 different sinusoid
frame_counter = 0
for phase in pl.linspace( 0 , 2 * pl.pi * 50 , 16 * 50 ):
#Reduce alpha for each old item, and remove
for handle in plot_handles:
alpha = handle.get_alpha()
if alpha / DECAY > 0.01 :
handle.set_alpha( alpha / DECAY )
else:
handle.remove()
plot_handles.remove( handle )
#Add new output of calling plot function to list of handles
plot_handles += pl.plot( pl.sin( x_axis + phase ) , 'bo' )
#Redraw figure
pl.draw()
#Save image
pl.savefig( 'frame_' + str( frame_counter ).zfill( 8 ) + '.png' )
frame_counter += 1
【讨论】: