2010-03-09 35 views
19

Có cách nào để Matplotlib hiển thị các ký tự có dấu (é, ã, â, vv) không?Các ký tự có dấu trong Matplotlib

Ví dụ: tôi đang cố gắng sử dụng các ký tự có dấu trên set_yticklabels() và hình vuông hiển thị Matplotlib thay thế, và khi tôi sử dụng unicode() nó sẽ hiển thị sai ký tự.

Có cách nào để thực hiện công việc này không?

Hóa ra bạn có thể sử dụng u "EA", nhưng trước tiên bạn phải thiết lập mã hóa file:

# Using the magic encoding 
# -*- coding: utf-8 -*- 

Sau đó Matplotlib làm cho đúng

u"é" 

Tôi cũng học được rằng bạn có thể sử dụng

import matplotlib.font_manager as fm 
fp1=fm.FontProperties(fname="/path/to/somefont.ttf") 
ax.title("é",fontproperties=fp1) 

trong trường hợp bạn cần hiển thị một ký tự mà Matplotlib không có.

+0

Tốt câu hỏi. Unicode có một tiết mục phong phú của các ký hiệu toán học, và tôi hy vọng rằng Unicode sẽ hoạt động khi được sử dụng. –

+0

Có cách nào để bắt chước hành vi này bằng chế độ tương tác không? (Ví dụ, tôi đang sử dụng IPython.) Bí quyết sử dụng trình quản lý phông chữ không hiệu quả đối với tôi. – Halka

+0

Nevermind, đây là vấn đề với [chính IPython] (https://github.com/ipython/ipython/issues/labels/unicode#issue/25). – Halka

Trả lời

14

Prefix các dây với u nói với Python rằng họ là chuỗi Unicode:

ax.set_yticklabels([u'é', u'ã', u'â']) 
+1

Cảm ơn bạn đã nhập ptomato nhưng nó hiển thị các ký tự sai khi tôi sử dụng u "é" hoặc unicode ('é', 'latin-1'), làm những công việc này cho bạn? – OldJim

+0

Vâng, những công việc đó cho tôi. Như bạn nói trong bản cập nhật của mình, đó là mã hóa tệp của bạn đã gây ra sự cố. – ptomato

+0

Không hoạt động đối với một số ký tự nhất định, ví dụ: u'ő ' –

7

Chắc chắn. Bạn có thể sử dụng TeX:

from matplotlib import rcParams 
rcParams['text.usetex'] = True 
ax = ... # Axes object 
ax.set_yticklabels(['$\'{e}$', '$\tilde{a}$', '$\hat{a}$']) 
+0

Sử dụng tác phẩm tex, nhưng vì văn bản được hiển thị nằm trong cơ sở dữ liệu (unicode), tôi sẽ phải "chuyển đổi" nó mọi lúc, hoặc có giải pháp dễ dàng hơn ở đây? – OldJim

+0

Ồ, được rồi. Vâng, sau đó giải pháp này có thể gây phiền nhiễu. Sử dụng các giải pháp khác. –

5

Tôi cũng có vấn đề này đặc biệt khi tôi đã cố gắng để sử dụng chức năng chú thích. Dưới đây là thông báo lỗi của tôi:

ValueError: matplotlib display text must have all code points < 128 or use Unicode strings 

Và đây là những gì tôi đã sử dụng để giải quyết này:

"accented string i.e. sāo paulo".decode('utf-8') 
0

từ matplotlib nhập khẩu rc

rcParams['text.latex.unicode']=True 
Các vấn đề liên quan