与 pyQt 一起使用时箱线图不显示

Posted

技术标签:

【中文标题】与 pyQt 一起使用时箱线图不显示【英文标题】:Boxplot not showing up when used with pyQt 【发布时间】:2015-01-07 00:13:57 【问题描述】:

我在 Python 中使用 boxplot(和 bxp)。为了与 pyQt 集成,我使用了来自 matplotlib example 和 stack 的代码。 当我在弹出窗口中绘制箱线图时,它工作正常。当我尝试在 pyQt 中的画布上绘制一些简单的图时(如 sin,或如上例所示),它工作正常。

问题是当我尝试在 pyQt 窗口中的画布上绘制箱线图时,只显示传单。

我做错了吗?还有其他方法可以在 pyQt 窗口中显示箱线图吗?

看起来像这样:

我的代码 -s 独立版本

import matplotlib.pyplot as plt
data = ['med': 6.0, 'q1': 4.0, 'q3': 8.0, 'whislo': 3.0, 'whishi': 10.0, 'fliers': [20, 1]]
fig, axes = plt.subplots()
axes.bxp(data)
plt.show()

从stack answer 重写的绘图方法:

    data = ['med': 6.0, 'q1': 4.0, 'q3': 8.0, 'whislo': 3.0, 'whishi': 10.0, 'fliers': [20, 1]]
    ax = self.figure.add_subplot(111)
    ax.hold(False)
    ax.bxp(data)
    self.canvas.draw()

【问题讨论】:

执行您的第一个示例时出现错误(TypeError: 'AxesSubplot' object is not iterable)。你用的是哪个 Python/pyqt/matplotlib 版本。 对不起,错字。 fig, axes = plt.subplot() 应该是 fig, axes = plt.subplots()。我在问题中修复了它。 myplotlib 1.4.2,python 3.4.2,pyqt 4.11 我现在可以确认您所看到的(也在 PySide 中),但我无法帮助您。对不起。 我已经回答了你的问题,希望我提供给你的解决方案也对你有用。 【参考方案1】:

嘿,我已经搜索了解决方案,但找不到任何好的提示。但后来我试着玩了一下 与代码。不知何故它现在可以工作了(问题是 ax.hold(False) 行:

如果你这样称呼它(来自你问题的代码):

data = ['med': 6.0, 'q1': 4.0, 'q3': 8.0, 'whislo': 3.0, 'whishi': 10.0, 'fliers': [20, 1]]
ax = self.figure.add_subplot(111)
ax.hold(False) // call hold BEFORE bxp(data)
ax.bxp(data)
self.canvas.draw()

这不起作用。但是现在在 bxp(data) 之后调用 hold 并且它可以工作(我对其进行了测试并且它工作)。

data = ['med': 6.0, 'q1': 4.0, 'q3': 8.0, 'whislo': 3.0, 'whishi': 10.0, 'fliers': [20, 1]]
ax = self.figure.add_subplot(111)
ax.bxp(data)
ax.hold(False) // call hold AFTER bxp(data)
self.canvas.draw()

第二个版本运行良好;) 我希望我能帮助你回答这个问题。

【讨论】:

以上是关于与 pyQt 一起使用时箱线图不显示的主要内容,如果未能解决你的问题,请参考以下文章

GGPLOT箱线图按颜色细分,箱线图中间有平均值

格式化在 ggplot 的箱线图中显示为文本的数字。解释箱线图外均值的定位

箱线图中添加的垂直线与 x 轴不匹配

使用 Plotly Graph 对象按中值对箱线图进行排序

根据中值对箱线图进行排序

用一条线连接箱线图(ggplot2)