LINUX.ORG.RU

matplotlib рисование графика


0

1

Народ, помогите нарисовать график типа такого.

http://img13.imageshost.ru/img/2011/07/31/image_4e35711272cb5.png

Очень важно чтобы дата по оси X форматировалась если не также то охтябы как-нибудь похоже и адекватно, чтобы было видно какой день когого месяца и года, и если масштаб позволяет то и сколько времени.

В документации чето совсем не понятно какие аллокаторы какие форматеры что за херня. Кто умеет подобное ?

Ответ на: комментарий от anonymous

Печалька, такое не канает.

Тут теперь другая проблема вылезла, всем известный фейл второго питона при работе со строками всех достал уже. Вот такоой вот код

#!/usr/bin/env python

from pylab import figure, show
from matplotlib.dates import AutoDateLocator, AutoDateFormatter, drange, DateFormatter
import datetime
import random

dates = drange(datetime.datetime(2010, 1, 1), datetime.datetime(2010, 12,31), datetime.timedelta(days = 1))
opens = map(lambda a: random.random(), dates)

fig = figure()
ax = fig.add_subplot(111)
ax.plot_date(dates, opens, '-')

majloc = AutoDateLocator()
majform = AutoDateFormatter(majloc)

ax.xaxis.set_major_locator(majloc)
ax.xaxis.set_major_formatter(majform)
ax.autoscale_view()
ax.grid(True)
fig.autofmt_xdate()
show()
при запуске выдает вот такое
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/matplotlib/backends/backend_gtk.py", line 394, in expose_event
    self._render_figure(self._pixmap, w, h)
  File "/usr/lib/python2.7/site-packages/matplotlib/backends/backend_gtkagg.py", line 75, in _render_figure
    FigureCanvasAgg.draw(self)
  File "/usr/lib/python2.7/site-packages/matplotlib/backends/backend_agg.py", line 394, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/matplotlib/figure.py", line 798, in draw
    func(*args)
  File "/usr/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/matplotlib/axes.py", line 1946, in draw
    a.draw(renderer)
  File "/usr/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/matplotlib/axis.py", line 971, in draw
    tick_tups = [ t for t in self.iter_ticks()]
  File "/usr/lib/python2.7/site-packages/matplotlib/axis.py", line 907, in iter_ticks
    majorLabels = [self.major.formatter(val, i) for i, val in enumerate(majorLocs)]
  File "/usr/lib/python2.7/site-packages/matplotlib/dates.py", line 486, in __call__
    return self._formatter(x, pos)
  File "/usr/lib/python2.7/site-packages/matplotlib/dates.py", line 336, in __call__
    return self.strftime(dt, self.fmt)
  File "/usr/lib/python2.7/site-packages/matplotlib/dates.py", line 362, in strftime
    return cbook.unicode_safe(dt.strftime(fmt))
  File "/usr/lib/python2.7/site-packages/matplotlib/cbook.py", line 41, in unicode_safe
    else: return unicode(s, preferredencoding)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
при этом если запустить
LANG=C python blahblah.py
то все работает, только даты конечно рисуются с английскими названиями . И вот кусок из cbook.py
  31 
  32 try:
  33     preferredencoding = locale.getpreferredencoding(False).strip()
  34     if not preferredencoding:
  35         preferredencoding = None
  36 except (ValueError, ImportError, AttributeError):
  37     preferredencoding = None
  38 
  39 def unicode_safe(s):
  40     if preferredencoding is None: return unicode(s)
  41     else: return unicode(s, preferredencoding)
  42 
А вот сессия айпитона
In [1]: import matplotlib.cbook as cb

In [2]: cb.preferredencoding
Out[2]: 'ANSI_X3.4-1968'

In [3]: cb.locale.get
cb.locale.getdefaultlocale      cb.locale.getpreferredencoding
cb.locale.getlocale             cb.locale.gettext

In [3]: cb.locale.getpreferredencoding(False)
Out[3]: 'ANSI_X3.4-1968'
Как заставить его использовать utf-8 ?

s9gf4ult ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.