2016-03-14 1 views
4

Эй, я пытаюсь сэкономить свой сюжет, но он всегда сокращает мой титул. Я думаю, что это из-за y = 1.05 (чтобы установить расстояние до названия). Я не могу это исправить. Есть ли способ сохранить весь график?Python: Savefig отключает заголовок

time=round(t[time_period],0) 
most_sensitive=sorted(most_sensitive) 
plt.figure(figsize=(10, 5)) 
plt.suptitle("Scatterplot "+str(name)+" , "+r'$\Delta$'+"Output , Zeit= "+str(time)+" s",fontsize=20,y=1.05) 
figure_colour=["bo","ro","go","yo"] 
for i in [1,2,3,4]: 
    ax=plt.subplot(2,2,i) 
    plt.plot(parm_value[:,most_sensitive[i-1]], Outputdiff[:,most_sensitive[i-1]],figure_colour[i-1]) 
    ax.set_xlabel(name+"["+str(most_sensitive[i-1])+"] in "+str(unit)) 
    ax.set_ylabel(r'$\Delta$'+"Output") 
    lb, ub = ax.get_xlim() 
    ax.set_xticks(np.linspace(lb, ub, 4)) 
    lb, ub = ax.get_ylim() 
    ax.set_yticks(np.linspace(lb, ub, 8)) 
    ax.grid(True) 


plt.tight_layout() 
newpath = r'C:/Users/Tim_s/Desktop/Daten/'+str(name)+'/'+str(time)+'/'+'scatterplot'+'/' 
if not os.path.exists(newpath): 
    os.makedirs(newpath) 
savefig(newpath+str(name)+'.png') 
+0

Пожалуйста, следуйте [Minimal, полный и проверяемый примеру] (http://stackoverflow.com/help/mcve). В его нынешнем виде невозможно воссоздать вашу проблему по мере того, как отсутствует важный код или посмотреть, что проблема на скриншоте. –

ответ

0

Трудно знать, что вы получаете, но следующее должно помочь решить:

Заменить существующую suptitle с:

import matplotlib.pyplot as plt 
import numpy as np 

name = "test" 
unit = 'cms' 
most_sensitive = [1, 2, 3, 4, 5] 
time = 5 #round(t[time_period],0) 
most_sensitive=sorted(most_sensitive) 
fig = plt.figure(figsize=(10, 5)) 
figure_colour=["bo","ro","go","yo"] 
plt.suptitle("Scatterplot "+str(name)+" , "+r'$\Delta$'+"Output , Zeit= "+str(time)+" s",fontsize=20, y=0.95) 

for i in [1, 2, 3, 4]: 
    ax = plt.subplot(2, 2, i) 
    #plt.plot(parm_value[:,most_sensitive[i-1]], Outputdiff[:,most_sensitive[i-1]],figure_colour[i-1]) 
    ax.set_xlabel(name+"["+str(most_sensitive[i-1])+"] in "+str(unit)) 
    ax.set_ylabel(r'$\Delta$'+"Output") 
    lb, ub = ax.get_xlim() 
    ax.set_xticks(np.linspace(lb, ub, 4)) 
    lb, ub = ax.get_ylim() 
    ax.set_yticks(np.linspace(lb, ub, 8)) 
    ax.grid(True) 

plt.tight_layout() 
plt.subplots_adjust(top=0.85)  # Add space at top 

newpath = r'C:/Users/Tim_s/Desktop/Daten/'+str(name)+'/'+str(time)+'/'+'scatterplot'+'/' 
if not os.path.exists(newpath): 
    os.makedirs(newpath) 

plt.savefig(newpath+str(name)+'.png') 

Давать вам:

Matplotlib screenshot

+0

Теперь я накладываю снова свои подзаголовки (y = 0,98) ... но когда y = 1.05, это не в моем savefig – qwertz

3

Вы можете trol размещение подзаголовков с использованием plt.subplots_adjust. В этом случае соответствующий параметр для настройки - top.

Как и при изменении этого, вам нужно будет сделать y в suptitle менее 1 (так как это работает в координатах фигур - ничего> 1 будет в верхней части рисунка). Вы даже можете забыть о настройке y полностью, если вы правильно установили subplots_adjust.

Обратите внимание, что если вы все еще хотите tight_layout контролировать остальную часть размещения сюжетного, вам нужно будет иметь свою subplots_adjust линию после того, как tight_layout, или все, что вы установили там будет перезаписаны.

(В качестве альтернативы, вы можете установить left, right и bottom в subplots_adjust, и устраняет необходимость в tight_layout).

Вот пример сценарий (принимая соответствующие части из вашего примера):

import matplotlib.pyplot as plt 

plt.figure(figsize=(10,5)) 
name='mdot' 
time='918.0' 

plt.suptitle("Scatterplot "+str(name)+" , "+r'$\Delta$'+"Output , Zeit= "+str(time)+" s",fontsize=20) 

for i in [1,2,3,4]: 
    ax=plt.subplot(2,2,i) 

plt.tight_layout() 
plt.subplots_adjust(top=0.88) 

plt.savefig('example.png') 

enter image description here

+1

Nice :) ошибка была subplots_adjust line before tight_layout – qwertz