ich habe ein Skript (nicht von mir), dass Daten plottet und die Diagramme in einem PDF ausgibt. Die PDF-Seite ist so aufgebaut, dass 2x4 Diagramme daruf angeordnet sind.
In Python 3.6 funktioniert das auch alles wie gewünscht. Jetzt habe ich allerdings auf meinem Rechner Python 3.7 installiert und dort gibt es Probleme mit dem Layout. Der Befehl "tight_layout" kann nicht angewand werden und daher überschneiden sich die verschiedenen Plots in der Figure. Ich habe auch schon an einen Istallationsfehler gedacht, aber anderes funktioniert problemlos; auch der Befehl "tight_layout" funktioniert in anderen Zusammenhängen.
Hat jemand eine Idee, ob sich hier was von 3.6 zu 3.7 geändert haben könnte, oder woran es ansonsten liegt?
Ich bin natürlich auch offen für andere Lösungsvorschläge, würde nur ungern alles komplett ändern.
Liebe Grüße und schon mal vielen Dank!
Die Fehlermeldung/Warnung (ich weiß nicht, wie ich Nummerierungen mit einfüge. Die betreffende Zeile befindet sich aber ziemlich am Ende):
H:/.../pandaImport.py:692: UserWarning: Tight layout not applied. tight_layout cannot make axes width small enough to accommodate all axes decorations
plt.tight_layout(h_pad=2)
Der betroffene Skriptausschnitt:
Code: Alles auswählen
def print_pdf2(path_list, data_mess, page_appendix, page_number, N_Mess):
name_pdf = 'temp_Messung' + str(data_mess.loc['Nr']) + '.pdf'
print('*' * 20)
print(name_pdf)
print('*' * 20)
pdf_pages = PdfPages(name_pdf)
logo = mpimg.imread(control_dat.logo_path)
# Generate the pages
nb_plots = len(path_list)
column_number = 0
plotnumber = 1
# Number of dias per page, if not in the protocol it will be calculated
if math.isnan(data_mess.loc['nb_plots_per_page']):
nb_plots_per_page = calc_row(nb_plots)
else:
nb_plots_per_page = 8
grid_size = (control_dat.row_per_page, control_dat.colums_per_page)
for i, samples in enumerate(path_list):
# Create a figure instance (ie. a new page) if needed
row_number = i % int(nb_plots_per_page/2)
if i % nb_plots_per_page == 0:
fig = plt.figure(figsize=control_dat.figsize, dpi=control_dat.dpi)
column_number = 0
if row_number == 0 and column_number < 2 and i % nb_plots_per_page > 0:
column_number = column_number + 1
plotnumber = plotnumber + 1
# read data for file
data, para, para_tmp2 = read_data(path_list[i])
# plot the data
grid_position = get_position(nb_plots_per_page, column_number, row_number)
plt.subplot2grid(grid_size, grid_position, colspan=control_dat.col_span, rowspan=control_dat.row_span)
# except the Overall and Average if exist
if para['OVERALL'] is not None:
over = '\n Overall: ' + str(round(float(para['OVERALL']), 3)) + para['yUnit'] + ', '
else:
over = '\n'
if para['Average'] is not None:
av = 'Average: ' + str(int(para['Average'])) + ', '
else:
av = '\n'
# if time function then no average output but maximum amplitude
if 'Time' in para['label']:
av = '\n'
MaxAmp = np.sqrt(np.max( data * data))
ma = '\n Max Amplitude: ' + str(round(float(MaxAmp), 3)) + para['yUnit']
else:
ma = ''
if 'PowerSpec' in para['label']:
x_list = data.index.tolist()
y_list = data["y"].tolist()
max_y_list=max(y_list)
index_EF=y_list.index(max_y_list)
EF = x_list[index_EF]
ef = '\n max. ' + str(round(float(max_y_list), 4)) + para['yUnit'] + ' bei ' + str(round(float(EF), 3)) + para['xUnit'] #+ ', \n' + win
else:
ef = ''
# title
color, label = assign_chanel(data_mess, para['label'])
title1 = para['fileName'] + ': ' + label
# Plot
print(title1)
if 'Octave' in str(para['label']):
x = data.index.values
y = data.loc[:,'y']
plt.bar(x, y, width=0.1*np.array(x), ec="k", align="edge")
plt.xscale('log')
elif 'COH' in str(para['label']):
plt.rc('axes.formatter', useoffset=False)
plt.plot(data, linewidth=1, color=color)
else:
plt.plot(data, linewidth=1, color=color)
plt.title(title1, fontsize=control_dat.title_fontsize)
# Set axis Labels
plt.xlabel('[' + para['xUnit'] + ' ] ' + ma + over + av + ef, fontsize=control_dat.label_fontsize)
yLabel = assign_yLabel(data_mess, para, para_tmp2, para['label'])
plt.ylabel (yLabel, fontsize=control_dat.label_fontsize)
if (i + 1) % nb_plots_per_page == 0 or (i + 1) == nb_plots:
#Txt creation for suptitle
if N_Mess == '' or N_Mess == 'Bezeichnung der Messung eingeben':
txt1 = 'Messung ' + str(data_mess.loc['Nr']) + '\n'
else:
txt1 = str(N_Mess) + ', ' + 'Messung ' + str(data_mess.loc['Nr']) + '\n'
Erreg = data_mess.loc['Erregung']
if len(Erreg) > 65:
pos=[]
for m in re.finditer(' ',Erreg):
if m.start() < 65:
pos.append(m.start())
p=pos[-1]
Ertmp=Erreg +' '
Ertmp1=Ertmp[0:p]
Ertmp2=Ertmp[p+1:]
Ertmp=Ertmp1 +'\n' + Ertmp2
Erreg=Ertmp
txt2 = 'Erregung: ' + str(Erreg) + '\n'
if str(data_mess.loc['Kommentar']) == 'nan':
txt3 = ''
else:
txt3 = str(data_mess.loc['Kommentar'])
txt = '\n' + txt1 + txt2 + txt3
# set suptitle
fig.suptitle(txt, fontsize=control_dat.fontsize_sub)
plt.tight_layout(h_pad=2) #line 692 DIESER BEFEHL KANN NICHT ANGEWANDT WERDEN
# LOGO
sub1 = plt.subplot2grid(grid_size, (1, 9), colspan=3)
sub1.imshow(logo)
sub1.axis('off')
#Footer
footer = ' '*110+ page_appendix + str(page_number) + '\n' + control_dat.get_footer()
fig.text(.1, 0, footer, size=control_dat.size)
pdf_pages.savefig(fig)
page_number += 1
column_number = 0
# Write the PDF document to the disk
pdf_pages.close()
plt.close('all')
return page_number, name_pdf[code]