Вопрос

Я только начинаю использовать '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: Вместо получения графика по умолчанию, на котором точки соединены непрерывными линиями, я бы предпочел получить график, скажем, '*'.Как бы я это сделал?
Это было полезно?

Решение

  • Как Tim Pietzcker указывает, можно сократить если filename код в конце используя номер строки форматирования.

    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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top