【问题标题】:matplotlib: Qt4Agg toolbar's irritating bugmatplotlib:Qt4Agg 工具栏的恼人错误
【发布时间】:2012-09-16 09:19:14
【问题描述】:

我使用 Qt4Agg (PyQt4) 作为在 matplotlib 中渲染绘图的后端。这有一个非常有用的工具栏和一个非常有用的按钮'编辑曲线和轴参数'。但是,每当我按下它时,它都会出错。 (我知道它很有用,因为它适用于条形图,但不适用于折线图:P)。

下图可以清楚地看到原因和回溯。

我认为这可能是当前版本的 matplotlib 的一个错误,所以我在最新版本的相同版本上尝试了这个,但它仍然给出相同的错误。

这是给出相同错误的最简单脚本(情节与上面不同)-

import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()

(我已经通过配置文件/etc/matplotlibrc配置了后端)

请帮我解决这个问题。

【问题讨论】:

    标签: python matplotlib toolbar


    【解决方案1】:

    这似乎确实是 matplotlib 的 Qt4 表单编辑器中的一个错误。

    错误似乎在FormWidget.setup() 方法的一部分中,在matplotlib/backends/qt4_editor/formwidget.py 中。在 Windows 上的 matplotlib 1.1.0 中(我无法重现该问题),它包含以下内容:

            elif isinstance(value, (list, tuple)):
                selindex = value.pop(0)
                field = QComboBox(self)
                if isinstance(value[0], (list, tuple)):
                    keys = [ key for key, _val in value ]
                    value = [ val for _key, val in value ]
                else:
                    keys = value
                field.addItems(value)
    

    Kubuntu Precise 上的 matplotlib v1.1.1rc(我可以重现问题)将上面的第二行替换为

                selindex = list(value).pop(0)
    

    最终,两个版本都不正确。

    1.1.0版本方法的问题是它不处理元组(元组是不可变的,没有pop)方法,而1.1.1版本的rc代码的问题是第一个value 的元素应该被删除,但它只会从 list(value) 创建的临时列表中删除。

    此错误已在版本 1.1.1 中修复。我刚刚下载并安装了这个版本,无法再重现问题。

    【讨论】:

    • 谢谢卢克 :)。当我在 ubuntu 12.04 机器上测试它时,我以为我拥有最新版本,但事实并非如此。它是 1.1.1rc。所以我刚刚从 github 安装了最新版本,现在它运行得非常好!谢谢。
    猜你喜欢
    • 2011-05-22
    • 2011-09-02
    • 1970-01-01
    • 2013-06-05
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多