Зацикливание в 'savefig' и 'title' на графике для нескольких файлов - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть несколько файлов .txt, и я создаю цикл для чтения этого и строю каждый файл на отдельном графике, чтение в порядке, моя проблема заключается в цикле в функции 'savefig' и в 'title' ofсюжет, потому что они просто сохранить последний файл.мой код такой:

enter code here

frames = np.linspace(10,49,40)

filelist = []

for i in frames:
    filelist.append("xyz_%s.txt" %i)

plotlist = []

for i in frames:
    plotlist.append("proy_%s.png" %i)

timelist = []

for i in frames:
    timelist.append("TIME = %s [Myr]" %i)

plt.rcParams.update({'figure.max_open_warning': 0})

for fname in filelist:
    data = np.loadtxt(fname)
    x = data[:,0]
    y = data[:,1]
    z = data[:,2]

fig = plt.figure()

gs = gridspec.GridSpec(1, 3) 
gs.update(left=0.07, right=0.98, bottom=0.3, top=0.6, wspace=0.3)

ax0 = plt.subplot(gs[0])
line0, = ax0.plot(x,y,'r.')

ax1 = plt.subplot(gs[1], sharey = ax0)
line1, = ax1.plot(x,z,'b.')


ax2 = plt.subplot(gs[2], sharey = ax0)
line2, = ax2.plot(y,z,'g.')

plt.gca().yaxis.set_major_locator(MaxNLocator())

ax0.xaxis.set_major_locator(plt.MaxNLocator(3))
ax1.xaxis.set_major_locator(plt.MaxNLocator(3))
ax2.xaxis.set_major_locator(plt.MaxNLocator(3))

ax0.yaxis.set_major_locator(plt.MaxNLocator(3))
ax1.yaxis.set_major_locator(plt.MaxNLocator(3))
ax2.yaxis.set_major_locator(plt.MaxNLocator(3))

ax0.set_xlabel('x[pc]', size=10)
ax0.set_ylabel('y[pc]', size=10)
ax1.set_xlabel('x[pc]', size=10)
ax1.set_ylabel('z[pc]', size=10)
ax2.set_xlabel('y[pc]', size=10)
ax2.set_ylabel('z[pc]', size=10)

ax0.set_xlim(-15,15)
ax0.set_ylim(-15,15)
ax1.set_xlim(-15,15)
ax1.set_ylim(-15,15)
ax2.set_xlim(-15,15)
ax2.set_ylim(-15,15)

plt.subplots_adjust(hspace=0)

for ftime in timelist:
    ax0.set_title(r'$ftime$',fontsize=12,horizontalalignment='left',verticalalignment='bottom')

for fplot in plotlist:
    plt.savefig('fplot',facecolor=fig.get_facecolor(), transparent=True) 
    plt.cla()
    plt.clf()
    plt.close()

Ps: у меня проблемы с чтением файлов, таких как xyz_02.0txt, потому что 'linspace' не начинается с нуля, какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Если вы просто пытаетесь получить имена файлов, такие как «xyz_10.txt», «xyz_11.txt» и т. Д. Через «xyz_49.txt», то то же самое с «proy_10.png» и т. Д., тогда вам не обязательно нужен массив Numpy.Стандартный список Python сделает свое дело.Just set frames = range(10,50).Или:

frames = range(10,50)
filelist = [ "xyz_%s.txt" % str(i) for i in frames ]
plotlist = [ "proy_%s.png" % str(i) for i in frames ]

Если вы хотите, чтобы ваш список frames представлял собой строки "01", "02" и т. Д. Через "40", тогда вы можете использовать команду .zfill для заполненияоднозначные числа с дополнительным 0:

frames = [ str(i).zfill(2) for i in range(1,41) ] # This is ["01", "02", ... "40"]
filelist = [ "xyz_%s.txt" % c for c in frames ] # We don't need str(c) here; c is already a string
plotlist = [ "proy_%s.png" % c for c in frames ]
0 голосов
/ 20 декабря 2018

Чтобы ответить на ваш первый вопрос, plt.savefig('fplot',facecolor=fig.get_facecolor(), transparent=True) всегда перезаписывает файл с именем fplot.Вам нужно изменить его в цикле for.

Чтобы ответить на ваш вопрос Ps, используйте zfill для заполнения нулями.Например,

filelist.append("xyz_" + str(int(i)).zfill(2) + ".txt")
...