Пара сомнений новичка matplotlib
-
20-09-2019 - |
Вопрос
Я только начинаю использовать '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: Вместо получения графика по умолчанию, на котором точки соединены непрерывными линиями, я бы предпочел получить график, скажем, '*'.Как бы я это сделал?
Решение
- Как 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
Не связан с StackOverflow