pyqt5插入柱状图

问题遇到的现象和发生背景

想要在空白处 插入一个柱状图 不知道怎么插入

img

你要是需要画柱状图或者说明折线图或饼图,推荐使用qchatview。这个是饼图

img

很简单,你看一下

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtChart import (QChart, QChartView, QBarSeries, QBarSet, QBarCategoryAxis, QValueAxis)
from QtCharts import Ui_MainWindow


class Window(QMainWindow, Ui_MainWindow):
    def __init__(self, app):
        super(QMainWindow, self).__init__()
        self.app = app
        self.setup_ui()  # 渲染画布

    def setup_ui(self):
        self.setupUi(self)  # 调用Ui_MainWindow的setupUi渲染界面
        chart = QChart()
        self.setting()
        self.plot_view.setChart(chart)

        chart.addSeries(self.series)
        chart.setTitle("参数指标xxx")

        axisY = QValueAxis()
        axisY.applyNiceNumbers()  # 调整Y轴范围,使可用显示所有数据,便于观看
        chart.addAxis(axisY, Qt.AlignLeft)
        self.series.attachAxis(axisY)  # 数据与坐标轴绑定

        self.axis_x = QBarCategoryAxis()  # 将类别添加到图表的轴
        daysofweek = '算法对比'
        self.axis_x.append(daysofweek)
        chart.addAxis(self.axis_x, Qt.AlignBottom)
        self.series.attachAxis(self.axis_x)

    def setting(self):
        cols = ['算法1', '算法2', '算法3']
        data = [53, 24, 85]

        self.series = QBarSeries()  # 将一系列数据显示为按类别分组的垂直条形图
        for i in range(len(cols)):
            setTemp = QBarSet(cols[i])  # QBarSet 类表示条形图中的一组条形
            temp = data[i]  # 柱状图的数值
            setTemp.append(temp)
            self.series.append(setTemp)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    mywindow = Window(app)
    mywindow.show()
    sys.exit(app.exec_())



1.柱状图的代码如下:


```python
import sys
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow
from  PyQt5.QtChart import (QChartView, QChart, QBarSeries, QBarSet, 
                            QLegend, QBarCategoryAxis, QValueAxis)
 
class DemoChartBarSeries(QMainWindow):
    def __init__(self, parent=None):
        super(DemoChartBarSeries, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战 Qt for Python: QChart柱状图演示')      
        # 设置窗口大小
        self.resize(480, 360)
        
        self.createChart()
        
    def createChart(self):
        
        #创建条状单元
        barSet0 = QBarSet('Jane')
        barSet1 = QBarSet('Jone')
        barSet2 = QBarSet('Axel')
        barSet3 = QBarSet('Mary')
        barSet4 = QBarSet('Samantha')
        
        barSet0.append([1, 2, 3, 4, 5, 6])
        barSet1.append([5, 0, 0, 4, 0, 7])
        barSet2.append([3, 5, 8, 13, 8, 5])
        barSet3.append([5, 6, 7, 3, 4, 5])
        barSet4.append([9, 7, 5, 3, 1, 2])
        
        #条状图
        barSeries = QBarSeries()
        barSeries.append(barSet0)
        barSeries.append(barSet1)
        barSeries.append(barSet2)
        barSeries.append(barSet3)
        barSeries.append(barSet4)
        
        #创建图表
        chart = QChart()
        chart.addSeries(barSeries)
        chart.setTitle('简单柱状图示例')
        chart.setAnimationOptions(QChart.SeriesAnimations) #设置成动画显示
        
        #设置横向坐标(X轴)
        categories = ['一月', '二月', '三月', '四月', '五月', '六月']
        axisX = QBarCategoryAxis()
        axisX.append(categories)
        chart.addAxis(axisX, Qt.AlignBottom)
        barSeries.attachAxis(axisX)
        
        #设置纵向坐标(Y轴)
        axisY = QValueAxis()
        axisY.setRange(0, 15)
        chart.addAxis(axisY, Qt.AlignLeft)
        barSeries.attachAxis(axisY)
        
        #图例属性
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
        
        #图表视图
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
        
        self.setCentralWidget(chartView)
      
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoChartBarSeries()
    window.show()
    sys.exit(app.exec())   


```
2.如果需要在groupbox中显示,则需要
2.1 定义一个layout;
2.2 给layout添加一个widget,即柱状图;
2.3 给groupbox添加layout即可。