1

我刚刚开始使用“matplotlib”,并且遇到了 2 个主要障碍,我似乎无法从文档/示例等中解决:这是 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. 疑点一:如你所见,我基本上是清空剧情,然后每次都保存新剧情。我想保持 Y 轴的范围不变,我试图通过“plt.axis([0,500,0,180])”来做到这一点。但它似乎不起作用,并且每次都会自动设置。
  2. 疑问2:我宁愿获得一个“*”的图,而不是获得点由连续线连接的默认图。我该怎么做?
4

1 回答 1

2

  • 正如 Tim Pietzcker 指出的那样,您可以通过使用字符串数字格式来缩短最后的文件名代码。

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

    替换为最多填充 3 个零的%03d整数。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
于 2009-12-17T21:16:11.767 回答