2012-04-27 17 views
11

Jest similar question - ale nie mogę sprawić, aby proponowane tam rozwiązanie działało.Jak dopasować długi tytuł?

Oto przykład działka o długim tytule:

#!/usr/bin/env python 

import matplotlib 
import matplotlib.pyplot 
import textwrap 

x = [1,2,3] 
y = [4,5,6] 

# initialization: 
fig = matplotlib.pyplot.figure(figsize=(8.0, 5.0)) 

# lines: 
fig.add_subplot(111).plot(x, y) 

# title: 
myTitle = "Some really really long long long title I really really need - and just can't - just can't - make it any - simply any - shorter - at all." 

fig.add_subplot(111).set_title("\n".join(textwrap.wrap(myTitle, 80))) 

# tight: 
(matplotlib.pyplot).tight_layout() 

# saving: 
fig.savefig("fig.png") 

Daje

AttributeError: 'module' object has no attribute 'tight_layout' 

i jeśli mogę wymienić (matplotlib.pyplot).tight_layout() z fig.tight_layout() Daje:

AttributeError: 'Figure' object has no attribute 'tight_layout' 

Więc moje pytanie jest - jak mogę dopasować tytuł do fabuły?

+1

'tight_layout' jest tylko w kilku ostatnich wydaniach matplotlib. Jakiej wersji używasz? Myślę, że 'tight_layout' został dodany w wersji 1.1, choć może to być 1.0. –

+0

Mój jest "1.0.1". – Adobe

+0

@Joe Kington: Prawdopodobnie masz rację: odtworzenie Your [answer] (http://stackoverflow.com/a/9604442/788700) daje ten sam błąd. Pobierałem najnowsze źródło. – Adobe

Odpowiedz

35

Oto co mam w końcu wykorzystane:

#!/usr/bin/env python3 

import matplotlib 
from matplotlib import pyplot as plt 
from textwrap import wrap 

data = range(5) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.plot(data, data) 

title = ax.set_title("\n".join(wrap("Some really really long long long title I really really need - and just can't - just can't - make it any - simply any - shorter - at all.", 60))) 

fig.tight_layout() 
title.set_y(1.05) 
fig.subplots_adjust(top=0.8) 

fig.savefig("1.png") 

enter image description here

5

Jednym ze sposobów, aby to zrobić jest po prostu zmienić rozmiar czcionki w tytule:

import pylab as plt 

plt.rcParams["axes.titlesize"] = 8 

myTitle = "Some really really long long long title I really really need - and just can't - just can't - make it any - simply any - shorter - at all." 
plt.title(myTitle) 
plt.show() 

enter image description here

W odpowiedzi pan związany jest kilka innych dobrych rozwiązań, które obejmują dodawanie nowych linii. Istnieje nawet automatic solution, który zmienia rozmiar na podstawie figury!

+0

To jest fajne. +1 – Adobe

+1

@Adobe przejdź do strony do dostosowywania matplotlib jest tutaj: http://matplotlib.sourceforge.net/users/customizing.html, choć pomaga, jeśli wiesz, czego szukasz już teraz! – Hooked

+0

To działa, ale jest to złe rozwiązanie. W twoim przykładzie czcionka tytułu jest nawet mniejsza niż w przypadku etykiet zaznaczenia. To sprawi, że tytuł będzie trudny do odczytania w publikacji lub prezentacji. – gerrit