PyQt5+QtChart实现绘制区域图
作者:SongYuLong的博客 发布时间:2021-08-15 01:00:05
标签:PyQt5,QtChart,区域图
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_())
效果图
补充
当然除了上面的方法,小编还为大家准备了另一种可以实现区域图绘制的方法,希望对大家有所帮助
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())
效果图
来源:https://blog.csdn.net/songyulong8888/article/details/12833129


猜你喜欢
- 需求:需要在v-html的html字符串的button中绑定点击事件,需要点击后做一些操作,必须渲染成html,但是渲染后的html里面写绑
- 主要利用了XMLHTTP的一些方法和属性来获取服务器的信息。 以下是全部源代码: &
- 以此文记录Python与Tensorflow及其开发环境的安装与配置过程,以备以后参考。1 硬件与系统条件 Win7 64位系统,显卡为NV
- GO1.7之后,新增了context.Context这个package,实现goroutine的管理。Context基本的用法参考GOLAN
- 在Python中,数据存储方式分为同步存储和异步存储。同步写入速度比较慢,而爬虫速度比较快,有可能导致数据保存不完整,一部分数据没有入库。而
- 1. 安装clickClick 是 Flask 的开发团队 Pallets 的另一款开源项目,它是用于快速创建命令行的第三方模块。官网文档地
- 简介网上流传的部分可以百度关键词“Python”和“word”后查看文章学习,以下内容为个人实践,修正了不能运行出错的情况。代码示例impo
- <HTML><HEAD><TITLE>SQL Server 数据库的备份
- 常见的SQL问题:◆选择重复,消除重复和选择出序列有例表:empemp_no name age001 Tom 17002 Sun 14003
- 一、Views文件夹 -> Shared文件夹下的 _Layout.cshtml 母版页@RenderBody当创建基于_Layout
- 插入记录时,影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。根据这些情况,可以分别进行优化,本节将介绍优化插入记录速度的几种方法。
- 转眼间上次写文章已经是 2022年12月15日的事情啦,本来从2022年7月份开始写作之后保持着每周一篇,然而从12月15日后断更了这么久,
- 看代码吧~如果两个dataloader的长度不一样,那就加个:from itertools import cycle仅使用zip,迭代器将在
- 很开心可以和导师阿坚在08gui大赛中一起去完成《fight》的图标设计,在这个过程中真的是受益匪浅!这里我谈一下在这个过程的一些小小心得。
- 前言优化随机森林算法,正确率提高1%~5%(已经有90%+的正确率,再调高会导致过拟合)论文当然是参考的,毕竟出现早的算法都被人研究烂了,什
- 小书学习的主要方向是TensorFlow和Pytorch,今天就来安装一下Pytorch。第一步:去官网看看Pytorch官网:(https
- 使用FFmpeg命令拼接多个mp3格式的音频文件时报错抛出异常,使用命令格式如下:ffmpeg -i 1.mp3 -i 2.mp3 -fil
- 在网上down了个web项目,在 IntelliJ IDEA 这个编辑器里面跑起来,但是发现domain文件夹下的xml文件都报如下的红色提
- php+lottery.js制作九宫格抽奖实例,本抽奖功能效果表现好,定制方便简单,新手学习跟直接拿来用都非常不错,兼容IE、火狐、谷歌等浏
- 从容器、可迭代对象谈起所有的容器都是可迭代的(iterable),迭代器提供了一个next方法。iter()返回一个迭代器,通过next()