使用 2D-Array 提供 PyQtGraph 条形图

Posted

技术标签:

【中文标题】使用 2D-Array 提供 PyQtGraph 条形图【英文标题】:Feeding PyQtGraph bar chart with 2D-Array 【发布时间】:2021-11-06 02:51:20 【问题描述】:

我有这个二维数组:

[[200, 200, 215], [161, 162, 172], [72, 45, 31], [116, 75, 33], [182, 182, 195], [103, 63, 26], [151, 152, 156], [211, 211, 228], [190, 191, 204], [98, 75, 49], [93, 51, 23], [135, 135, 135], [117, 107, 84], [163, 99, 35], [172, 173, 184], [172, 173, 184]]

我想绘制直方图之类的东西。 这些是 RGB 值。

我想要做的是在 X 轴上绘制每个子数组(在本例中为 1)的数量,并在 Y 轴上打印为标签的对。是否可以像这样输入我的 PyQtGraph 并用相应的颜色为条形着色?

这是一个使用 Ruby 和 ChartJS 的示例:

【问题讨论】:

【参考方案1】:

您可以先删除底部轴刻度标签,然后将每个条添加为具有适当宽度的 pg.InfiniteLine 对象。

使用AxisItem.setTicks(ticks)方法可以实现将y轴刻度标签改为r,g,b值。

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow
import pyqtgraph as pg
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')

class ColorBarPlot(pg.GraphicsLayoutWidget):

    def __init__(self):
        super(ColorBarPlot, self).__init__()
        self.p1 = pg.PlotItem() 
        self.addItem(self.p1)
        self.p1.getAxis('bottom').setStyle(showValues=False)

    def displayColors(self, colors):
        
        self.p1.clear()
        ticks = []
        for i, color in enumerate(colors):
            line = pg.InfiniteLine(
                pos=i+1, # y value of the line 
                angle=0, # horizontal, 90 is vertical 
                pen=pg.mkPen(pg.mkColor(color[0], color[1], color[2]), width=15) # Set color
            )
            self.p1.addItem(line)
            ticks.append((i+1, ',,'.format(color[0], color[1], color[2])))
        self.p1.getAxis('left').setTicks([ticks])



if __name__ == "__main__":

    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    app = QApplication([])
    win = QMainWindow()
    plot = ColorBarPlot()
    win.setCentralWidget(plot)
    plot.displayColors([[200, 200, 215], [161, 162, 172], [72, 45, 31], [116, 75, 33], [182, 182, 195], [103, 63, 26], [151, 152, 156], [211, 211, 228], [190, 191, 204], [98, 75, 49], [93, 51, 23], [135, 135, 135], [117, 107, 84], [163, 99, 35], [172, 173, 184], [172, 173, 184]])
    win.show()

    if (sys.flags.interactive != 1) or not hasattr(Qt.QtCore, "PYQT_VERSION"):
        QApplication.instance().exec_()

Result

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于使用 2D-Array 提供 PyQtGraph 条形图的主要内容,如果未能解决你的问题,请参考以下文章

当存储新元素时,2D-Array 会自行删除元素 [关闭]

pyqtgraph 的性能问题

在 Qt 中嵌入 PyQtGraph 而不生成新窗口

在pyqtgraph中实现实时绘图的最简单方法是啥

如何在 3D pyqtgraph 实现中设置 GLMeshItem 的绝对位置

pyqtgraph绘图如何使用pyqtgraph