2012-04-27 36 views
11

Có một similar question - nhưng tôi không thể đưa ra giải pháp được đề xuất ở đó.Làm cách nào để phù hợp với tiêu đề dài?

Dưới đây là một âm mưu dụ với một tiêu đề dài:

#!/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") 

nó mang lại cho một

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

và nếu tôi thay (matplotlib.pyplot).tight_layout() với fig.tight_layout() nó mang lại:

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

Vì vậy, câu hỏi của tôi là - làm thế nào để tôi phù hợp với tiêu đề cho cốt truyện?

+1

'tight_layout' là chỉ trong vài cuối cùng của phiên bản của matplotlib. Phiên bản nào bạn đang sử dụng? Tôi nghĩ rằng 'tight_layout' được thêm vào 1.1, mặc dù nó có thể là 1.0. –

+0

Mỏ là '1.0.1'. – Adobe

+0

@Joe Kington: Có thể bạn nói đúng: tái tạo [answer] (http://stackoverflow.com/a/9604442/788700) của bạn cũng cho cùng một lỗi. Tôi đang tải xuống nguồn mới nhất. – Adobe

Trả lời

35

Dưới đây là những gì tôi đã cuối cùng đã được sử dụng:

#!/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

Một cách để làm điều đó chỉ đơn giản là thay đổi kích thước font chữ của tiêu đề:

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

Trong câu trả lời bạn liên kết một số giải pháp tốt khác có liên quan đến dòng mới thêm. Thậm chí còn có automatic solution thay đổi kích thước dựa trên hình!

+0

Điều đó thật tuyệt. +1 – Adobe

+1

@Adobe trang truy cập để tùy chỉnh matplotlib có tại đây: http://matplotlib.sourceforge.net/users/customizing.html, mặc dù nó giúp ích nếu bạn biết bạn đang tìm kiếm gì! – Hooked

+0

Công trình này, nhưng nó là một giải pháp tồi. Trong ví dụ của bạn, phông chữ cho tiêu đề thậm chí còn nhỏ hơn cho các nhãn đánh dấu. Điều đó sẽ làm cho tiêu đề rất khó đọc trong một ấn phẩm hoặc bản trình bày. – gerrit

Các vấn đề liên quan