You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用RGB值2D数组实现PyQtGraph彩色柱状图并自定义轴标签

使用PyQtGraph实现自定义RGB标签柱状图

当然可以用PyQtGraph实现你想要的效果!虽然PyQtGraph通常偏向科学数据可视化,但通过自定义坐标轴和BarGraphItem组件,完全能做出符合需求的RGB标签柱状图。下面是一个完整的可运行示例:

完整代码实现

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
import pyqtgraph as pg

class RGBBarChart(QMainWindow):
    def __init__(self, rgb_data):
        super().__init__()
        self.rgb_data = rgb_data
        self.initUI()

    def initUI(self):
        # 设置主窗口基本属性
        self.setWindowTitle("RGB Histogram-like Chart")
        self.setGeometry(100, 100, 800, 600)

        # 创建中心部件和布局
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout(central_widget)

        # 创建绘图部件
        self.plot_widget = pg.PlotWidget()
        layout.addWidget(self.plot_widget)

        # 准备数据:处理Y轴标签和柱子参数
        num_bars = len(self.rgb_data)
        # Y轴刻度位置:每个柱子对应一个位置,从0到num_bars-1
        y_positions = list(range(num_bars))
        # Y轴标签:将每个RGB数组转为字符串格式
        y_labels = [str(rgb) for rgb in self.rgb_data]
        # 柱子的高度(X轴表示的数量,这里都是1)
        bar_heights = [1] * num_bars
        # 柱子的颜色:将RGB值从0-255转为0-1的浮点数(PyQtGraph颜色要求)
        bar_colors = [(r/255, g/255, b/255) for r, g, b in self.rgb_data]

        # 自定义Y轴刻度
        self.plot_widget.getAxis('left').setTicks([list(zip(y_positions, y_labels))])
        # 设置Y轴范围,让柱子居中显示
        self.plot_widget.setYRange(-0.5, num_bars - 0.5)
        # 设置X轴范围,从0到1(因为数量都是1)
        self.plot_widget.setXRange(0, 1.2)
        # 隐藏X轴刻度标签(如果不需要显示数字,只保留柱子长度)
        self.plot_widget.getAxis('bottom').setTicks([])

        # 创建柱状图项并添加到绘图部件
        bar_item = pg.BarGraphItem(
            x0=0,  # 柱子起始X位置
            x1=bar_heights,  # 柱子结束X位置(即高度)
            y0=[y - 0.3 for y in y_positions],  # 柱子底部Y位置
            y1=[y + 0.3 for y in y_positions],  # 柱子顶部Y位置
            brush=bar_colors  # 柱子填充颜色
        )
        self.plot_widget.addItem(bar_item)

if __name__ == "__main__":
    # 用户提供的RGB数据
    rgb_array = [
        [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]
    ]
    app = QApplication(sys.argv)
    window = RGBBarChart(rgb_array)
    window.show()
    sys.exit(app.exec_())

关键部分说明

  • Y轴自定义:通过setTicks方法将每个RGB数组转为字符串作为Y轴刻度标签,让每个柱子对应一个RGB值标签。
  • 柱子颜色处理:PyQtGraph的颜色参数需要0-1范围的浮点数,所以我们把原始的0-255 RGB值除以255进行转换。
  • 柱子位置与大小:通过y0和y1控制柱子在Y轴上的高度,让每个柱子占据固定的垂直空间,避免重叠。
  • X轴设置:因为每个柱子的数量都是1,所以X轴范围设置为0到1.2,同时可以隐藏X轴刻度标签,让视觉焦点集中在颜色和RGB标签上。

运行这段代码后,你会得到一个和ChartJS类似的效果:每个柱子用对应RGB颜色填充,Y轴显示该柱子的RGB值,X轴表示数量(这里都是1)。

内容的提问来源于stack exchange,提问作者Baker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:27:43