Пара сомнений в новичках - PullRequest
1 голос
/ 17 декабря 2009

Я только начинаю использовать '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. Сомнение 1: Как видите, я в основном очищаю график, а затем каждый раз сохраняю новый график.Я хочу сохранить диапазон оси Y постоянным и пытаюсь сделать это через "plt.axis ([0,500,0,180])".Но, похоже, он не работает и автоматически устанавливается каждый раз.
  2. Сомнение 2: Вместо получения графика по умолчанию, в котором точки соединяются сплошными линиями, я бы предпочелполучить сюжет, скажем, «*».Как бы я это сделал?

1 Ответ

2 голосов
/ 18 декабря 2009

  • Как указывает Тим ​​Пицкер, вы можете сократить код файла в конце используя форматирование числа строки.
    filename='plot%03d.png'%i
    

    заменяет %03d на целое число i, дополненное до 3 нулями. В 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
...