PyQt5+QtChart实现绘制区域图

作者:SongYuLong的博客 时间:2021-08-15 01:00:05 

PyQt5 QtChart-区域图

QAreaSeries用于创建区域图数据,传入两个QLineSeries对象。核心代码:

series0 = QLineSeries()
series1 = QLineSeries()
area = QAreaSeries(series0, series1)

示例代码

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5.QtChart import QAreaSeries, QLineSeries, QSplineSeries, QValueAxis, QChart, QChartView

class MyAreaWindow(QWidget):
   def __init__(self, parent=None):
       super(MyAreaWindow, self).__init__(parent)
       self.setWindowTitle("区域图")
       chart = QChart()
       chartView = QChartView()

# 创建Series
       series0 = QLineSeries()
       series1 = QLineSeries()

# 添加数据
       series0 << QPointF(1, 5) << QPointF(3, 7) << QPointF(7, 6) << QPointF(9, 7) \
       << QPointF(12, 6) << QPointF(16, 7) << QPointF(18, 5)
       series1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) \
       << QPointF(12, 3) << QPointF(16, 4) << QPointF(18, 3)

# 创建区域图
       area = QAreaSeries(series0, series1)
       area.setName("面积")

# 设置画笔, pen用于画区域的边框
       pen = QPen(Qt.red)
       pen.setWidth(3)
       area.setPen(pen)

# 设置画刷,brush用于填充区域
       brush = QBrush(Qt.yellow)
       area.setBrush(brush)

# gradient = QLinearGradient(QPointF(0, 0), QPointF(0, 1))
       # gradient.setColorAt(0.0, QColor(0x3cc63c))
       # gradient.setColorAt(1.0, QColor(0x16f626))
       # gradient.setCoordinateMode(QGradient.ObjectBoundingMode)
       # area.setBrush(gradient)

chart.addSeries(area)
       chart.createDefaultAxes()
       chart.axisX().setRange(0, 20)
       chart.axisY().setRange(0, 10)

chartView.setChart(chart)
       chartView.setRenderHint(QPainter.Antialiasing)

vbox = QVBoxLayout()
       vbox.addWidget(chartView)
       self.setLayout(vbox)

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

效果图

PyQt5+QtChart实现绘制区域图

补充

当然除了上面的方法,小编还为大家准备了另一种可以实现区域图绘制的方法,希望对大家有所帮助

import sys
from PyQt5.QtCore import Qt, QPointF
from PyQt5.QtGui import QPainter, QPen, QLinearGradient, QColor
from PyQt5.QtWidgets import QApplication, QMainWindow
from  PyQt5.QtChart import QChartView, QChart, QLineSeries, QAreaSeries

class DemoChartArea(QMainWindow):
   def __init__(self, parent=None):
       super(DemoChartArea, self).__init__(parent)  

# 设置窗口标题
       self.setWindowTitle('实战 Qt for Python: QChart面积图演示')      
       # 设置窗口大小
       self.resize(480, 360)

self.createChart()

def createChart(self):

#面积图的上下两条曲线
       #注意line0和line1的生存周期!!!!!
       self.line0 = QLineSeries()
       self.line1 = QLineSeries()

self.line0 << QPointF(1, 5) << QPointF(3, 7) << QPointF(7, 6) << QPointF(9, 7) << QPointF(12, 6) << QPointF(16, 7) << QPointF(18, 5)
       self.line1 << QPointF(1, 3) << QPointF(3, 4) << QPointF(7, 3) << QPointF(8, 2) << QPointF(12, 3) << QPointF(16, 4) << QPointF(18, 3)

#面积图
       areaSeries = QAreaSeries(self.line0, self.line1)
       areaSeries.setName('蝙蝠侠') #Batman

pen = QPen(QColor(0x059605))
       pen.setWidth(3)
       areaSeries.setPen(pen)

#渐变设置
       gradient = QLinearGradient(QPointF(0,0), QPointF(0, 1))
       gradient.setColorAt(0.0, QColor(0x3cc63c))
       gradient.setColorAt(1.0, QColor(0x26f626))
       gradient.setCoordinateMode(QLinearGradient.ObjectBoundingMode)
       areaSeries.setBrush(gradient)

#创建图表
       chart = QChart()
       chart.addSeries(areaSeries)
       chart.setTitle('简单面积图示例')
       chart.createDefaultAxes()
       chart.axes(Qt.Horizontal)[0].setRange(0, 20) #横坐标数值范围
       chart.axes(Qt.Vertical)[0].setRange(0, 10) #纵坐标数值范围

#图表视图
       chartView = QChartView(chart)
       chartView.setRenderHint(QPainter.Antialiasing)

self.setCentralWidget(chartView)

if __name__ == '__main__':
   app = QApplication(sys.argv)
   window = DemoChartArea()
   window.show()
   sys.exit(app.exec())

效果图

PyQt5+QtChart实现绘制区域图

来源:https://blog.csdn.net/songyulong8888/article/details/12833129

标签:PyQt5,QtChart,区域图
0
投稿

猜你喜欢

  • Go 代码生成工具详解

    2023-06-18 21:11:48
  • Docker实践之python应用容器化

    2023-06-07 03:29:43
  • PyCharm最新激活码(2020/10/27全网最新)

    2023-10-01 02:38:19
  • ASP 验证码的程序及原理

    2010-04-24 15:56:00
  • Python 爬虫爬取指定博客的所有文章

    2021-09-10 04:44:51
  • 语义、标准和样式

    2008-06-05 12:52:00
  • Python中logging日志模块代码调试过程详解

    2021-03-13 05:40:32
  • python条件和循环的使用方法

    2021-12-16 22:27:59
  • 用CSS实现柱状图(Bar Graph)的方法(二)—基于表格元素的柱状图

    2008-05-26 13:23:00
  • Python简单实现图片转字符画的实例项目

    2023-02-24 02:01:47
  • Django实现文件上传和下载功能

    2022-04-02 15:19:34
  • 使用Python的Scrapy框架十分钟爬取美女图

    2023-06-16 03:28:57
  • Python3.5常见内置方法参数用法实例详解

    2023-02-24 21:38:38
  • 使用Python对Excel进行读写操作

    2022-05-25 16:56:32
  • ASP中Utf-8与Gb2312编码转换乱码问题的解决方法 页面编码声明

    2012-11-30 20:45:55
  • 基于OpenCV目标跟踪实现人员计数器

    2022-11-17 15:04:03
  • 手机使用python操作图片文件(pydroid3)过程详解

    2021-06-19 13:45:39
  • Python 面向切面编程 AOP 及装饰器

    2021-05-07 14:16:36
  • python 使用OpenCV进行曝光融合

    2022-03-13 05:23:37
  • python获取引用对象的个数方式

    2023-06-19 23:10:30
  • asp之家 网络编程 m.aspxhome.com