当前位置: 首页 > 知识库问答 >
问题:

在pyqt中使用matplotlib的loglog绘图-轴消失

凌伟泽
2023-03-14

我正在尝试使用PyQt4中的matplotlib绘图库来绘制日志绘图。我在类中添加了两行代码

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

但后来轴消失了,下面出现了一个错误。我想问您如何使用PyQt4中的matplotlib库来绘制loglot plot。如下图所示。Python 2.7。5,matplotlib 1.3。0,PyQt 4.10。4.

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'

共有1个答案

舒飞捷
2023-03-14

这可能是因为您的x范围包括0。真正的对数刻度不能达到0。如果您想包含0,您需要使用'Semilog'来代替。

从您收到的错误消息判断,我敢打赌您使用的是相当旧的matplotlib版本?值得一提的是,在较新的版本中,包括0将导致刻度自动更改为semilog,而不是log

无论哪种方式,请尝试指定半对数比例,看看这是否有帮助。例如。

self.axes.set(xscale='semilog', yscale='semilog')
 类似资料:
  • 问题内容: 我正在尝试根据日期绘制信息。我有日期列表,格式为“ 01/02/1991”。 我通过执行以下操作来转换它们: 这使 然后我尝试使用num2date 绘图: 但是我得到一个错误。它显示“ ValueError:年份超出范围”。有什么办法吗? 问题答案: 就像@KyssTao所说的那样,必须是一个浮点数,其中要给出从0001-01-01开始的天数加一。因此,它不是1991年1月2日,因为如

  • 在一些应用场景中,有时需要绘制两个 x 轴或两个 y 轴,这样可以更直观地显现图像,从而获取更有效的数据。Matplotlib 提供的 twinx() 和 twiny() 函数,除了可以实现绘制双轴的功能外,还可以使用不同的单位来绘制曲线,比如一个轴绘制对函数,另外一个轴绘制指数函数。 下面示例绘制了一个具有两个 y 轴的图形,一个显示指数函数 exp(x),另一个显示对数函数 log(x)。 输

  • 问题内容: 只是在我编辑我的作品时注意到了这种细微差别。 以前,matplotlib如下所示: 但经过最近的升级我相信,有抵消,这会回来 这样地 从我现在看到的情况来看,这有点不必要。我想知道 1在数据可视化中,这个偏移量是否是一个好的实践?如果是这样的话,我就不做了。 2如何抵消这种抵消? 我可以手动恢复限制,但是 如果我再有20块地的话就不会扩大规模了。我搜索了一下,没有找到 这方面的信息太多

  • 原文:Using matplotlib in a python shell 警告 该页面的内容已严重过时。 默认情况下,matplotlib 将绘图延迟到脚本结束,因为绘图可能是开销大的操作,并且你可能不想在每次更改单个属性时更新绘图,而是只在所有属性更改后更新一次。 但是在 python shell 中工作时,通常需要用每个命令更新绘图,例如,在更改xlabel()或一行的标记样式之后。 虽然这

  • numpy.histogram()函数将输入数组和作为两个参数。 bin数组中的连续元素用作每个bin的边界。 Matplotlib 可以将直方图的数字表示转换为图形。 pyplot子模块的plt()函数将包含数据和数组的数组作为参数,并转换为直方图。