如何使用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
相关产品推荐
相关产品推荐

