Matplotlib新手怀疑夫妇

时间:2009-12-17 20:23:58

标签: python matplotlib scientific-computing

我刚刚开始使用'matplotlib',我遇到了两个主要障碍,我似乎无法解决文档/示例等问题:这是Python源代码:

#!/usr/bin/python
import matplotlib
matplotlib.use('Agg')

import matplotlib.pyplot as plt
for i in range(0,301):

    print "Plotting",i

    # Reading a single column data file
    l=plt.plotfile("gen"+str(i))

    plt.xlabel('Population')
    plt.ylabel('Function Value')
    plt.title('Generation'+str(i))
    plt.axis([0,500,0,180])

    plt.plot()

    if len(str(i)) == 1:
        plt.savefig("../images/plot00"+str(i)+".png")
    if len(str(i)) == 2:
        plt.savefig("../images/plot0"+str(i)+".png")
    if len(str(i)) == 3:
        plt.savefig("../images/plot"+str(i)+".png")

    plt.clf()
  1. 怀疑1:正如您所看到的,我基本上清理了情节,然后每次都保存新情节。我想保持Y轴的范围不变,我试图通过“plt.axis([0,500,0,180])”来做到这一点。但它似乎没有效果,每次都会自动设置。
  2. 怀疑2:我不想获得连续线连接点的默认情节,而是希望得到一个说'*'的情节。我该怎么做?

1 个答案:

答案 0 :(得分:2)

  • 正如Tim Pietzcker所指出的那样,如果文件名代码最后可以缩短 使用字符串编号格式。

    filename='plot%03d.png'%i
    

    %03d替换为填充最多3个零的整数i。 在Python2.6 +中,可以使用不那么漂亮但功能更强大的新字符串格式化语法来做同样的事情:

    filename='plot{0:03d}.png'.format(i)
    

  • 要获得用星号绘制的点,您可以使用选项marker='*'。 要摆脱连接线,请使用linestyle='none'
  • plt.plotfile(...)绘制一个数字。对plt.plot()的调用将第二个数字叠加在第一个数字的顶部。对plt.plot()的调用似乎修改了轴的尺寸,消除了plt.axis(...)的效果。幸运的是,修复很简单:只需不要调用plt.plot()。你不需要它。

#!/usr/bin/env python
import matplotlib
import matplotlib.pyplot as plt

matplotlib.use('Agg')   # This can also be set in ~/.matplotlib/matplotlibrc
for i in range(0,3):
    print 'Plotting',i
    # Reading a single column data file
    plt.plotfile('gen%s'%i,linestyle='none', marker='*')

    plt.xlabel('Population')
    plt.ylabel('Function Value')
    plt.title('Generation%s'%i)
    plt.axis([0,500,0,180])
    # This (old-style string formatting) also works, especial for Python versions <2.6:
    # filename='plot%03d.png'%i
    filename='plot{0:03d}.png'.format(i)
    print(filename)
    plt.savefig(filename)
    # plt.clf()  # clear current figure