PyQt5:QChart绘制折线图
-
QChart下载
在之前的博客里边,pyqt5,pip下载已经介绍完全,这次单独下载Qt Charts。
pip install PyQtChart
注意:在下载过程中,我之前安装的是 Pyqt5.11,会把PyQt5.11卸载,安装PyQt5.12,PyQtChart5.12。
- 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
显示效果图如下:
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 #别名
使用默认坐标系,运行图例如下:
源码如下:
源码路径
上诉问题解决方法:
设置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轴单元格刻度线
运行效果图如下: