2010-03-09 4 views
19

Есть ли способ получить Matplotlib для рендеринга акцентированных символов (é, ã, â и т. Д.)?Акцентированные символы в Matplotlib

Например, я пытаюсь использовать символы с акцентом на set_yticklabels(), а Matplotlib вместо этого отображает квадраты, а когда я использую unicode(), он отображает неправильные символы.

Есть ли способ сделать эту работу?

Оказывается, вы можете использовать U «EA», но сначала вы должны установить файл кодировки:

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

После этого Matplotlib правильно делает

u"é" 

Я также узнал, что вы можете использование

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

Если вам нужно визуализировать персонажи, которые не имеют Matplotlib.

+0

Хорошего вопрос. Unicode имеет богатый репертуар математических символов, и я надеюсь, что Unicode будет работать при его использовании. –

+0

Есть ли способ воспроизвести это поведение в интерактивном режиме? (Например, я использую IPython.) Трюк с использованием диспетчера шрифтов не работал для меня. – Halka

+0

Nevermind, это проблема с [IPython сама] (https://github.com/ipython/ipython/issues/labels/unicode#issue/25). – Halka

ответ

14

префикс строки с u сказать Python, что они Unicode строк:

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

Спасибо за ваш вклад ptomato, но он отображает неправильные символы, когда я использую u "é" или unicode ('é', 'latin-1'), работают ли они для вас? – OldJim

+0

Да, эти работы для меня. Как вы говорите в своем обновлении, причиной была проблема с кодировкой вашего файла. – ptomato

+0

Не работает для определенных символов, например. u'ő ' –

7

Несомненно. Вы можете использовать TeX:

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

Использование tex работает, но поскольку текст, который будет отображаться, находится в базе данных (unicode), мне придется «конвертировать» его каждый раз, или здесь есть более простое решение? – OldJim

+0

О, ладно. Да, тогда это решение может раздражать. Используйте другое решение. –

5

Я также имел эту проблему конкретно, когда я пытался использовать функцию аннотирования. Вот мое сообщение об ошибке:

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

И вот что я использовал для решения этой проблемы:

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

из Matplotlib импорта гса

rcParams['text.latex.unicode']=True 
Смежные вопросы