2014-11-08 3 views
1

Я пытаюсь использовать библиотеку построения matplotlib внутри PyQt4 для построения графика логлога. Я добавил две строки кода в классе:loglog plot with matplotlib in pyqt - оси исчезают

class MyStaticMplCanvas(MyMplCanvas): 
    """Simple canvas with a sine plot.""" 
     def compute_initial_figure(self): 
      t = arange(0.0, 3.0, 0.01) 
      s = abs((t * 1E+1) * sin(2 * pi * t) + 1E1) 

      self.axes.plot(t, s) 
      self.axes.set_yscale('log') #added code 
      self.axes.set_xscale('log') #added code 

, но затем оси исчезли и получили сообщение об ошибке ниже. Я хотел бы спросить вас, как я могу использовать библиотеку matplotlib внутри PyQt4 для построения графика логарифма. Как видно на рисунке ниже. Python 2.7.5, 1.3.0 Matplotlib, PyQt 4.10.4

enter image description here

Traceback (most recent call last): 
    File "C:\Python27\Lib\site-packages\matplotlib\backends\backend_qt4.py", line 299, in resizeEvent 
    self.draw() 
    File "C:\Python27\Lib\site-packages\matplotlib\backends\backend_qt4agg.py", line 148, in draw 
    FigureCanvasAgg.draw(self) 
    File "C:\Python27\Lib\site-packages\matplotlib\backends\backend_agg.py", line 451, in draw 
    self.figure.draw(self.renderer) 
    File "C:\Python27\Lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File "C:\Python27\Lib\site-packages\matplotlib\figure.py", line 1034, in draw 
    func(*args) 
    File "C:\Python27\Lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File "C:\Python27\Lib\site-packages\matplotlib\axes.py", line 2086, in draw 
    a.draw(renderer) 
    File "C:\Python27\Lib\site-packages\matplotlib\artist.py", line 54, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File "C:\Python27\Lib\site-packages\matplotlib\axis.py", line 1093, in draw 
    renderer) 
    File "C:\Python27\Lib\site-packages\matplotlib\axis.py", line 1042, in _get_tick_bboxes 
    extent = tick.label1.get_window_extent(renderer) 
    File "C:\Python27\Lib\site-packages\matplotlib\text.py", line 754, in get_window_extent 
    bbox, info, descent = self._get_layout(self._renderer) 
    File "C:\Python27\Lib\site-packages\matplotlib\text.py", line 329, in _get_layout 
    ismath=ismath) 
    File "C:\Python27\Lib\site-packages\matplotlib\backends\backend_agg.py", line 210, in get_text_width_height_descent 
    self.mathtext_parser.parse(s, self.dpi, prop) 
    File "C:\Python27\Lib\site-packages\matplotlib\mathtext.py", line 3009, in parse 
    self.__class__._parser = Parser() 
    File "C:\Python27\Lib\site-packages\matplotlib\mathtext.py", line 2193, in __init__ 
    - ((lbrace + float_literal + rbrace) 
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType' 

ответ

2

Это, вероятно, потому, что ваш х-диапазон включает в себя 0. Истинные логарифмические шкалы не могут достигать 0. Если вы хотите включить 0, вам нужно будет использовать 'semilog'.

Судя по сообщению об ошибке, которое вы получаете, я бы сказал, что вы используете довольно старый выпуск matplotlib? Для чего это стоит, в новых версиях, в том числе 0, будет автоматически изменяться шкала на semilog вместо log.

В любом случае, попробуйте указать полуглядную шкалу и посмотрите, поможет ли это. Например.

self.axes.set(xscale='semilog', yscale='semilog') 
+0

Благодарим за быстрый ответ. К сожалению, я обновлял (python, matplotlib), и теперь я получаю некоторую новую ошибку: 'ИмпортError: требуется шесть 1.3 или более поздняя; у вас есть 1.2.0-mpl ' Как только я разрешу это, я отвечу о вашем предложении. – avstenit

+0

Я пробовал ваше предложение, но это вызывает ошибку: ValueError: Неизвестный тип шкалы 'semilog' Я также обновил matplotlib (1.3 до 1.4.2), и он работает нормально с первым кодом, и он также работает. Я также получаю правильный результат, используя «self.axes.lolglog()», но у меня возникают проблемы с отображением сетки на графике журнала, поскольку «self.axes.grid (True)» не работает. – avstenit

Смежные вопросы