Найти - Пользователи
Полная версия: Русские буквы в датах при построении графиков с помощъю matplotlib.
Начало » Python для экспертов » Русские буквы в датах при построении графиков с помощъю matplotlib.
1
kt315e
Строю график в котором по оси X даты. При этом название месяца отображается квадратиками вместо букв. Система Debian Lenny 5, локаль utf8, python 2.5.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([datetime.datetime(2010, 1, 1, 22, 0),\
datetime.datetime(2010, 2, 1, 22, 0)], [1.0, 2.0])
fig.autofmt_xdate()
plt.show()
doza_and
from matplotlib import rc
rc('font',**{'family':'verdana'})
rc('text.latex',unicode=True)
rc('text.latex',preamble='\usepackage[utf8]{inputenc}')
rc('text.latex',preamble='\usepackage[russian]{babel}')
как то так, в доках это написано. Еще есть в нелпах pyscripter
kt315e
from matplotlib import rc
rc('font',**{'family':'verdana'})
rc('text.latex',unicode=True)
rc('text.latex',preamble='\usepackage[utf8]{inputenc}')
rc('text.latex',preamble='\usepackage[russian]{babel}')
Уже пробовал - неработает
Subideal Ox
Для работы предложенного варианта нужен latex. Чтобы его не устонавливать, можно попробовать прописать пути к шрифтам в font_manager.py
kt315e
Subideal Ox
Для работы предложенного варианта нужен latex. Чтобы его не устонавливать, можно попробовать прописать пути к шрифтам в font_manager.py
Есть Latex, прописал пути к шрифтам в font_manager.py. Пробовал по разному, может ему шрифт надо которого у меня нет?
Фрагмент из font_manager.py:
X11FontDirectories  = [
# an old standard installation point
"/usr/X11R6/lib/X11/fonts/TTF/",
# here is the new standard location for fonts
"/usr/share/fonts/",
# documented as a good place to install new fonts
"/usr/local/share/fonts/",
# common application, not really useful
"/usr/lib/openoffice/share/fonts/truetype/",
"/usr/share/fonts/truetype/",
"/usr/share/fonts/truetype/freefont"
]
Как сделать чтобы по англиски писал?
Subideal Ox
kt315e
Есть Latex, прописал пути к шрифтам в font_manager.py. Пробовал по разному, может ему шрифт надо которого у меня нет?
В этом случае было бы здорово, если бы Вы привели сообщение об ошибке.

У меня работает вот так:

X11FontDirectories  = [
"/usr/share/fonts/truetype/msttcorefonts/",
"/usr/share/fonts/truetype/freefont/",
"/usr/share/fonts/truetype/ttf-dejavu/",
"/usr/share/fonts/truetype/ttf-liberation/",
"/usr/share/fonts/type1/gsfonts/",
"/usr/share/fonts/type1/mathml/",
"/usr/share/matplotlib/mpl-data/fonts/",
"/usr/share/matplotlib/mpl-data/fonts/ttf/",
"/usr/share/matplotlib/mpl-data/fonts/afm/",
"/usr/share/matplotlib/mpl-data/fonts/pdfcorefonts",
# an old standard installation point
"/usr/X11R6/lib/X11/fonts/TTF/",
# here is the new standard location for fonts
"/usr/share/fonts/",
# documented as a good place to install new fonts
"/usr/local/share/fonts/",
# common application, not really useful
"/usr/lib/openoffice/share/fonts/truetype/",
]
kt315e
Как сделать чтобы по англиски писал?
Если нет желания ковыряться в настройках, я бы месяцы выводил цифрами.
kt315e
Так нет сообщения об ошибке, всё работает, только вместо букв квадратики. Попробую ваши пути может по ним что надо лежит.

Если нет желания ковыряться в настройках, я бы месяцы выводил цифрами.
А как чтобы полная дата получилась?
kt315e
Загадочный код в http://matplotlib.sourceforge.net/examples/api/date_index_formatter.html
def format_date(x, pos=None):
thisind = np.clip(int(x+0.5), 0, N-1)
return r.date[thisind].strftime('%Y-%m-%d')
Да ещё передача данных через глобальную переменную.
kt315e
Сделал как здесь: http://matplotlib.sourceforge.net/examples/pylab_examples/date_demo1.html
#!/usr/bin/python
# -*- coding: utf-8 -*-
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
from matplotlib.dates import DateFormatter

yearsFmt = DateFormatter('%Y-%m-%d')

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([datetime.datetime(2010, 1, 1, 22, 0),\
datetime.datetime(2010, 2, 1, 22, 0)], [1.0, 2.0])
ax.xaxis.set_major_formatter(yearsFmt)

fig.autofmt_xdate()
plt.show()
Ух! Спасибо!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB