PyQt5:QChart绘制折线图(1)

时间:2024-05-21 10:06:42

PyQt5:QChart绘制折线图

  1. QChart下载

    在之前的博客里边,pyqt5,pip下载已经介绍完全,这次单独下载Qt Charts。
    pip install PyQtChart

注意:在下载过程中,我之前安装的是 Pyqt5.11,会把PyQt5.11卸载,安装PyQt5.12,PyQtChart5.12。

  1. Qt Charts绘制折线图
       开发环境说明:
       系统环境:Win10
       IDE:Vs2017+Python3.6+Pyqt5.12

PyQt相关库调用。

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtChart import *

相关片段代码:
1>绘制折线一

		self.series_1 = QLineSeries() #定义LineSerise,将类QLineSeries实例化
		self._1_point_0 = QPointF(0.00,0.00) #定义折线坐标点
		self._1_point_1 = QPointF(0.80,6.00)
		self._1_point_2 = QPointF(2.00,2.00)
		self._1_point_3 = QPointF(4.00,3.00)
		self._1_point_4 = QPointF(1.00,3.00)
		self._1_point_5 = QPointF(5.00,3.00)
		self._1_point_list = [self._1_point_0,self._1_point_1,self._1_point_4,self._1_point_2,self._1_point_3,self._1_point_5] #定义折线点清单
		self.series_1.append(self._1_point_list) #折线添加坐标点清单
		self.series_1.setName("折线一")#折线命名

2>x轴,y轴的相关属性设置

		self.x_Aix = QValueAxis()#定义x轴,实例化
		self.x_Aix.setRange(0.00,5.00) #设置量程
		self.x_Aix.setLabelFormat("%0.2f")#设置坐标轴坐标显示方式,精确到小数点后两位
		self.x_Aix.setTickCount(6)#设置x轴有几个量程
		self.x_Aix.setMinorTickCount(0)#设置每个单元格有几个小的分级

		self.y_Aix = QValueAxis()#定义y轴
		self.y_Aix.setRange(0.00,6.00)
		self.y_Aix.setLabelFormat("%0.2f")
		self.y_Aix.setTickCount(7)
		self.y_Aix.setMinorTickCount(0)

3>CharView设置及坐标轴窗口设置

		self.charView = QChartView(self)  #定义charView,父窗体类型为 Window
		self.charView.setGeometry(0,0,self.width(),self.height())  #设置charView位置、大小
		self.charView.chart().addSeries(self.series_1)  #添加折线
		self.charView.chart().addSeries(self.series_2)  #添加折线
#		self.charView.chart().addSeries(self.series_3)  #添加折线
		self.charView.chart().setAxisX(self.x_Aix) #设置x轴属性
		self.charView.chart().setAxisY(self.y_Aix) #设置y轴属性
#		self.charView.chart().createDefaultAxes() #使用默认坐标系
		self.charView.chart().setTitleBrush(QBrush(Qt.cyan))  #设置标题笔刷
		self.charView.chart().setTitle("双折线") #设置标题		
		self.charView.show()#显示charView

显示效果图如下:
PyQt5:QChart绘制折线图(1)
4>其他说明:
CharView既可以单独作为一个窗口显示,也可以嵌入到widget或者别的窗体显示。
当设置主窗口为父窗体的是时候,如果不做单独的设置,charview为固定大小,没有自适应属性。
当charview作为单独窗体显示的时候,有自适应属性。

self.charView = QChartView(self) #设置父窗体为主窗口
self.charView = QChartView() #charview为单独的窗体显示

如果只想显示单独的窗体,把父窗口给隐藏就可以,或者把

app = QApplication(sys.argv)
window = m_window();
#window.show()  #把window显示给注释
sys.exit(app.exec_())

碰到一个奇怪的问题,如果使用默认x,y轴坐标系,坐标点显示正确,如果使用自定义坐标轴,则第二个点显示错误,这个问题随后研究。
注意:类的实例化与别名的区别,如果不注意,在调用类成员函数时,会造成编译错误。

self.LineSeries = QLineSeries()#	类的实例化
self.LineSeries = QLineSeries #别名

使用默认坐标系,运行图例如下:
PyQt5:QChart绘制折线图(1)
源码如下:
源码路径

上诉问题解决方法:
设置x轴,y轴方法修改如下:

		self.charView.chart().createDefaultAxes() #使用默认坐标系
		self.charView.chart().axisX().setRange(0.00,5.00) #设置默认x轴量程
		self.charView.chart().axisX().setTickCount(6)#设置x轴坐标轴节点个数
		self.charView.chart().axisX().setMinorTickCount(2)#设置单元格刻度线
		self.charView.chart().axisX().setLabelFormat("%0.2f")#设置坐标轴精确度
		self.charView.chart().axisY().setRange(0.00,6.00)#设置Y轴坐标轴量程
		self.charView.chart().axisY().setTickCount(7)#设置坐标轴节点
		self.charView.chart().axisY().setMinorTickCount(2)#设置Y轴单元格刻度线

运行效果图如下:
PyQt5:QChart绘制折线图(1)