Pyqt QCustomPlot 简介、安装与实用代码示例(一)

目录

  • 简介
  • 安装
  • 实用代码示例
    • 带有填充的简单衰减正弦函数及其红色的指数包络线
    • 具有数据点的 sinc 函数、相应的误差条和 2--sigma 置信带
    • 几种散点样式的演示
    • 展示 QCustomPlot 在设计绘图方面的多功能性
  • 结语

所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 nixgnauhcuy’s blog!

如需转载,请标明出处!

完整代码我已经上传到 Github 上了,可前往 https://github.com/nixgnauhcuy/QCustomPlot_Pyqt_Study 获取。
完整文章路径:

  • Pyqt QCustomPlot 简介、安装与实用代码示例(一) | nixgnauhcuy
  • Pyqt QCustomPlot 简介、安装与实用代码示例(二) | nixgnauhcuy
  • Pyqt QCustomPlot 简介、安装与实用代码示例(三) | nixgnauhcuy
  • Pyqt QCustomPlot 简介、安装与实用代码示例(四) | nixgnauhcuy

简介

QCustomPlot 是一个用于绘图和数据可视化的 Qt C++ 小部件。它没有其他依赖项,并且有详细的文档说明。这个绘图库专注于制作高质量的、适合发表的二维图表和图形,同时在实时可视化应用中提供高性能。

QCustomPlot 可以导出为多种格式,例如矢量化的 PDF 文件和光栅化图像(如 PNG、JPG 和 BMP)。QCustomPlot 是在应用程序内部显示实时数据以及为其他媒体制作高质量图表的解决方案。

QCustomPlot is a Qt C++ widget for plotting and data visualization. It has no further dependencies and is well documented. This plotting library focuses on making good looking, publication quality 2D plots, graphs and charts, as well as offering high performance for realtime visualization applications. Have a look at the Setting Up and the Basic Plotting tutorials to get started.

QCustomPlot can export to various formats such as vectorized PDF files and rasterized images like PNG, JPG and BMP. QCustomPlot is the solution for displaying of realtime data inside the application as well as producing high quality plots for other media.

安装

推荐安装 QCustomPlot_PyQt5QCustomPlot2 目前许多源都无法下载,目前只有豆瓣源和腾讯源有(豆瓣源已失效)。

pip install QCustomPlot_PyQt5orpip install -i https://mirrors.cloud.tencent.com/pypi/simple/ QCustomPlot2

实用代码示例

官方提供了多个 demo,不过都是使用 qtC++实现的,由于我们使用的 pyqt,故使用 pyqt 实现。

带有填充的简单衰减正弦函数及其红色的指数包络线

A simple decaying sine function with fill and its exponential envelope in red

import sys, mathfrom PyQt5.QtWidgets import QApplication, QGridLayout, QWidget
from PyQt5.QtGui import QPen, QBrush, QColor
from PyQt5.QtCore import Qt
from QCustomPlot_PyQt5 import QCustomPlot, QCP, QCPAxisTickerTime, QCPRangeclass MainForm(QWidget):def __init__(self) -> None:super().__init__()self.setWindowTitle("带有填充的简单衰减正弦函数及其红色的指数包络线")self.resize(400,400)self.customPlot = QCustomPlot(self)self.gridLayout = QGridLayout(self).addWidget(self.customPlot)# add two new graphs and set their look:self.customPlot.addGraph()self.customPlot.graph(0).setPen(QPen(Qt.blue)) # line color blue for first graphself.customPlot.graph(0).setBrush(QBrush(QColor(0, 0, 255, 20))) # first graph will be filled with translucent blueself.customPlot.addGraph()self.customPlot.graph(1).setPen(QPen(Qt.red)) # line color red for second graph# generate some points of data (y0 for first, y1 for second graph):x = []y0 = []y1 = []for i in range(251):x.append(i)y0.append(math.exp(-i/150.0)*math.cos(i/10.0)) # exponentially decaying cosiney1.append(math.exp(-i/150.0)) # exponential envelopeself.customPlot.xAxis.setTicker(QCPAxisTickerTime())self.customPlot.xAxis.setRange(0, 250)self.customPlot.yAxis.setRange(-1.1, 1.1)# configure right and top axis to show ticks but no labels:# (see QCPAxisRect::setupFullAxesBox for a quicker method to do this)self.customPlot.xAxis2.setVisible(True)self.customPlot.xAxis2.setTickLabels(False)self.customPlot.yAxis2.setVisible(True)self.customPlot.yAxis2.setTickLabels(False)# pass data points to graphs:self.customPlot.graph(0).setData(x, y0)self.customPlot.graph(1).setData(x, y1)# let the ranges scale themselves so graph 0 fits perfectly in the visible area:self.customPlot.graph(0).rescaleAxes()# same thing for graph 1, but only enlarge ranges (in case graph 1 is smaller than graph 0):self.customPlot.graph(1).rescaleAxes(True)# Note: we could have also just called customPlot->rescaleAxes(); instead# Allow user to drag axis ranges with mouse, zoom with mouse wheel and select graphs by clicking:self.customPlot.setInteractions(QCP.iRangeDrag | QCP.iRangeZoom | QCP.iSelectPlottables)# make left and bottom axes always transfer their ranges to right and top axes:self.customPlot.xAxis.rangeChanged[QCPRange].connect(self.customPlot.xAxis2.setRange)self.customPlot.yAxis.rangeChanged[QCPRange].connect(self.customPlot.yAxis2.setRange)if __name__ == '__main__':app = QApplication(sys.argv)mainForm = MainForm()mainForm.show()sys.exit(app.exec())

具有数据点的 sinc 函数、相应的误差条和 2–sigma 置信带

sinc function with data points, corresponding error bars and a 2-sigma confidence band

import sys, math, randomfrom PyQt5.QtWidgets import QApplication, QGridLayout, QWidget
from PyQt5.QtGui import QPen, QBrush, QColor, QFont
from PyQt5.QtCore import Qt, QLocale
from QCustomPlot_PyQt5 import QCustomPlot, QCPGraph, QCPScatterStyle, QCPErrorBarsclass MainForm(QWidget):def __init__(self) -> None:super().__init__()self.setWindowTitle("具有数据点的 sinc 函数、相应的误差条和 2--sigma 置信带")self.resize(400,400)self.customPlot = QCustomPlot(self)self.gridLayout = QGridLayout(self).addWidget(self.customPlot)self.customPlot.legend.setVisible(True)self.customPlot.legend.setFont(QFont("Helvetica",9))# set locale to english, so we get english decimal separator:self.customPlot.setLocale(QLocale(QLocale.English, QLocale.UnitedKingdom))# add confidence band graphs:self.customPlot.addGraph()self.pen = QPen(Qt.PenStyle.DotLine)self.pen.setWidth(1)self.pen.setColor(QColor(180,180,180))self.customPlot.graph(0).setName("Confidence Band 68%")self.customPlot.graph(0).setPen(self.pen)self.customPlot.graph(0).setBrush(QBrush(QColor(255,50,30,20)))self.customPlot.addGraph()self.customPlot.legend.removeItem(self.customPlot.legend.itemCount()-1) # don't show two confidence band graphs in legendself.customPlot.graph(1).setPen(self.pen)self.customPlot.graph(0).setChannelFillGraph(self.customPlot.graph(1))# add theory curve graph:self.customPlot.addGraph()self.pen.setStyle(Qt.PenStyle.DashLine)self.pen.setWidth(2)self.pen.setColor(Qt.GlobalColor.red)self.customPlot.graph(2).setPen(self.pen)self.customPlot.graph(2).setName("Theory Curve")# add data point graph:self.customPlot.addGraph()self.customPlot.graph(3).setPen(QPen(Qt.GlobalColor.blue))self.customPlot.graph(3).setLineStyle(QCPGraph.lsNone)self.customPlot.graph(3).setScatterStyle(QCPScatterStyle(QCPScatterStyle.ssCross, 4))# add error bars:self.errorBars = QCPErrorBars(self.customPlot.xAxis, self.customPlot.yAxis)self.errorBars.removeFromLegend()self.errorBars.setAntialiased(False)self.errorBars.setDataPlottable(self.customPlot.graph(3))self.errorBars.setPen(QPen(QColor(180,180,180)))self.customPlot.graph(3).setName("Measurement")# generate ideal sinc curve data and some randomly perturbed data for scatter plot:x0 = []y0 = []yConfUpper = []yConfLower = []for i in range(250):x0.append((i/249.0-0.5)*30+0.01) # by adding a small offset we make sure not do divide by zero in next code liney0.append(math.sin(x0[i])/x0[i]) # sinc functionyConfUpper.append(y0[i]+0.15)yConfLower.append(y0[i]-0.15)x0[i] *= 1000x1 = []y1 = []y1err = []for i in range(50):# generate a gaussian distributed random number:tmp1 = random.random()tmp2 = random.random()r = math.sqrt(-2*math.log(tmp1))*math.cos(2*math.pi*tmp2) # box-muller transform for gaussian distribution# set y1 to value of y0 plus a random gaussian pertubation:x1.append((i/50.0-0.5)*30+0.25)y1.append(math.sin(x1[i])/x1[i]+r*0.15)x1[i] *= 1000y1err.append(0.15)# pass data to graphs and let QCustomPlot determine the axes ranges so the whole thing is visible:self.customPlot.graph(0).setData(x0, yConfUpper)self.customPlot.graph(1).setData(x0, yConfLower)self.customPlot.graph(2).setData(x0, y0)self.customPlot.graph(3).setData(x1, y1)self.errorBars.setData(y1err, y1err)self.customPlot.graph(2).rescaleAxes()self.customPlot.graph(3).rescaleAxes(True)# setup look of bottom tick labels:self.customPlot.xAxis.setTickLabelRotation(30)self.customPlot.xAxis.ticker().setTickCount(9)self.customPlot.xAxis.setNumberFormat("ebc")self.customPlot.xAxis.setNumberPrecision(1)self.customPlot.xAxis.moveRange(-10)# make top right axes clones of bottom left axes. Looks prettier:self.customPlot.axisRect().setupFullAxesBox()if __name__ == '__main__':app = QApplication(sys.argv)mainForm = MainForm()mainForm.show()sys.exit(app.exec())

几种散点样式的演示

A demonstration of several scatter point styles

import sys, mathfrom PyQt5.QtWidgets import QApplication, QGridLayout, QWidget
from PyQt5.QtGui import QPen, QColor, QFont, QPainterPath
from PyQt5.QtCore import Qt
from QCustomPlot_PyQt5 import QCustomPlot, QCPGraph, QCPScatterStyleclass MainForm(QWidget):def __init__(self) -> None:super().__init__()self.setWindowTitle("几种散点样式的演示")self.resize(400,400)self.customPlot = QCustomPlot(self)self.gridLayout = QGridLayout(self).addWidget(self.customPlot)self.customPlot.legend.setVisible(True)self.customPlot.legend.setFont(QFont("Helvetica", 9))self.customPlot.legend.setRowSpacing(-3)shapes = [QCPScatterStyle.ssCross, QCPScatterStyle.ssPlus, QCPScatterStyle.ssCircle, QCPScatterStyle.ssDisc, QCPScatterStyle.ssSquare, QCPScatterStyle.ssDiamond, QCPScatterStyle.ssStar, QCPScatterStyle.ssTriangle, QCPScatterStyle.ssTriangleInverted, QCPScatterStyle.ssCrossSquare, QCPScatterStyle.ssPlusSquare, QCPScatterStyle.ssCrossCircle, QCPScatterStyle.ssPlusCircle, QCPScatterStyle.ssPeace, QCPScatterStyle.ssCustom]shapes_names = ["ssCross","ssPlus","ssCircle","ssDisc","ssSquare","ssDiamond","ssStar","ssTriangle","ssTriangleInverted","ssCrossSquare","ssPlusSquare","ssCrossCircle","ssPlusCircle","ssPeace","ssCustom"]self.pen = QPen()# add graphs with different scatter styles:for i in range(len(shapes)):self.customPlot.addGraph()self.pen.setColor(QColor(int(math.sin(i*0.3)*100+100), int(math.sin(i*0.6+0.7)*100+100), int(math.sin(i*0.4+0.6)*100+100)))# generate data:x = [k/10.0 * 4*3.14 + 0.01 for k in range(10)]y = [7*math.sin(x[k])/x[k] + (len(shapes)-i)*5 for k in range(10)]self.customPlot.graph(i).setData(x, y)self.customPlot.graph(i).rescaleAxes(True)self.customPlot.graph(i).setPen(self.pen)self.customPlot.graph(i).setName(shapes_names[i])self.customPlot.graph(i).setLineStyle(QCPGraph.lsLine)# set scatter style:if shapes[i] != QCPScatterStyle.ssCustom:self.customPlot.graph(i).setScatterStyle(QCPScatterStyle(shapes[i], 10))else:customScatterPath = QPainterPath()for j in range(3):customScatterPath.cubicTo(math.cos(2*math.pi*j/3.0)*9, math.sin(2*math.pi*j/3.0)*9, math.cos(2*math.pi*(j+0.9)/3.0)*9, math.sin(2*math.pi*(j+0.9)/3.0)*9, 0, 0)self.customPlot.graph(i).setScatterStyle(QCPScatterStyle(customScatterPath, QPen(Qt.black, 0), QColor(40, 70, 255, 50), 10))# set blank axis lines:self.customPlot.rescaleAxes()self.customPlot.xAxis.setTicks(False)self.customPlot.yAxis.setTicks(False)self.customPlot.xAxis.setTickLabels(False)self.customPlot.yAxis.setTickLabels(False)# make top right axes clones of bottom left axes:self.customPlot.axisRect().setupFullAxesBox()if __name__ == '__main__':app = QApplication(sys.argv)mainForm = MainForm()mainForm.show()sys.exit(app.exec())

展示 QCustomPlot 在设计绘图方面的多功能性

Demonstrating QCustomPlot’s versatility in styling the plot

import sys, math, randomfrom PyQt5.QtWidgets import QApplication, QGridLayout, QWidget
from PyQt5.QtGui import QPen, QColor, QFont, QBrush, QLinearGradient
from PyQt5.QtCore import Qt
from QCustomPlot_PyQt5 import QCustomPlot, QCPGraph, QCPScatterStyle, QCPBars, QCPLineEndingclass MainForm(QWidget):def __init__(self) -> None:super().__init__()self.setWindowTitle("展示 QCustomPlot 在设计绘图方面的多功能性")self.resize(600,400)self.customPlot = QCustomPlot(self)self.gridLayout = QGridLayout(self).addWidget(self.customPlot)# prepare data:x1 = [i/(20-1)*10 for i in range(20)]y1 = [math.cos(x*0.8+math.sin(x*0.16+1.0))*math.sin(x*0.54)+1.4 for x in x1]x2 = [i/(100-1)*10 for i in range(100)]y2 = [math.cos(x*0.85+math.sin(x*0.165+1.1))*math.sin(x*0.50)+1.7 for x in x2]x3 = [i/(20-1)*10 for i in range(20)]y3 = [0.05+3*(0.5+math.cos(x*x*0.2+2)*0.5)/(x+0.7)+random.random()/100 for x in x3]x4 = x3y4 = [(0.5-y)+((x-2)*(x-2)*0.02) for x,y in zip(x4,y3)]# create and configure plottables:graph1 = QCPGraph(self.customPlot.xAxis, self.customPlot.yAxis)graph1.setData(x1, y1)graph1.setScatterStyle(QCPScatterStyle(QCPScatterStyle.ssCircle, QPen(Qt.black, 1.5), QBrush(Qt.white), 9))graph1.setPen(QPen(QColor(120, 120, 120), 2))graph2 = QCPGraph(self.customPlot.xAxis, self.customPlot.yAxis)graph2.setData(x2, y2)graph2.setPen(QPen(Qt.PenStyle.NoPen))graph2.setBrush(QColor(200, 200, 200, 20))graph2.setChannelFillGraph(graph1)bars1 = QCPBars(self.customPlot.xAxis, self.customPlot.yAxis)bars1.setWidth(9/(20-1))bars1.setData(x3, y3)bars1.setPen(QPen(Qt.PenStyle.NoPen))bars1.setBrush(QColor(10, 140, 70, 160))bars2 = QCPBars(self.customPlot.xAxis, self.customPlot.yAxis)bars2.setWidth(9/(20-1))bars2.setData(x4, y4)bars2.setPen(QPen(Qt.PenStyle.NoPen))bars2.setBrush(QColor(10, 100, 50, 70))bars2.moveAbove(bars1)# move bars above graphs and grid below bars:self.customPlot.addLayer("abovemain", self.customPlot.layer("main"), QCustomPlot.limAbove)self.customPlot.addLayer("belowmain", self.customPlot.layer("main"), QCustomPlot.limBelow)graph1.setLayer("abovemain")self.customPlot.xAxis.grid().setLayer("belowmain")self.customPlot.yAxis.grid().setLayer("belowmain")# set some pens, brushes and backgrounds:self.customPlot.xAxis.setBasePen(QPen(Qt.white, 1))self.customPlot.yAxis.setBasePen(QPen(Qt.white, 1))self.customPlot.xAxis.setTickPen(QPen(Qt.white, 1))self.customPlot.yAxis.setTickPen(QPen(Qt.white, 1))self.customPlot.xAxis.setSubTickPen(QPen(Qt.white, 1))self.customPlot.yAxis.setSubTickPen(QPen(Qt.white, 1))self.customPlot.xAxis.setTickLabelColor(Qt.white)self.customPlot.yAxis.setTickLabelColor(Qt.white)self.customPlot.xAxis.grid().setPen(QPen(QColor(140, 140, 140), 1, Qt.DotLine))self.customPlot.yAxis.grid().setPen(QPen(QColor(140, 140, 140), 1, Qt.DotLine))self.customPlot.xAxis.grid().setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt.DotLine))self.customPlot.yAxis.grid().setSubGridPen(QPen(QColor(80, 80, 80), 1, Qt.DotLine))self.customPlot.xAxis.grid().setSubGridVisible(True)self.customPlot.yAxis.grid().setSubGridVisible(True)self.customPlot.xAxis.grid().setZeroLinePen(QPen(Qt.PenStyle.NoPen))self.customPlot.yAxis.grid().setZeroLinePen(QPen(Qt.PenStyle.NoPen))self.customPlot.xAxis.setUpperEnding(QCPLineEnding(QCPLineEnding.esSpikeArrow))self.customPlot.yAxis.setUpperEnding(QCPLineEnding(QCPLineEnding.esSpikeArrow))plotGradient = QLinearGradient()plotGradient.setStart(0, 0)plotGradient.setFinalStop(0, 350)plotGradient.setColorAt(0, QColor(80, 80, 80))plotGradient.setColorAt(1, QColor(50, 50, 50))self.customPlot.setBackground(plotGradient)axisRectGradient = QLinearGradient()axisRectGradient.setStart(0, 0)axisRectGradient.setFinalStop(0, 350)axisRectGradient.setColorAt(0, QColor(80, 80, 80))axisRectGradient.setColorAt(1, QColor(30, 30, 30))self.customPlot.axisRect().setBackground(axisRectGradient)self.customPlot.rescaleAxes()self.customPlot.yAxis.setRange(0, 2)self.customPlot.legend.setVisible(True)self.customPlot.legend.setFont(QFont("Helvetica", 9))self.customPlot.legend.setRowSpacing(-3)if __name__ == '__main__':app = QApplication(sys.argv)mainForm = MainForm()mainForm.show()sys.exit(app.exec())

结语

官网给的示例太多了,一篇塞进太多内容也不好,所以其他的示例放在后面吧,后续有空再更新出来~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/854707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RERCS系统开发实战案例-Part05 FPM Application的Feeder Class搜索组件的实施

1、通过事务码 SE24对Feeder Class实施 1)接口页签的简单说明: ① IF_FPM_GUIBB:通用UI构建块,整个UIBB模块的基础接口; ② IF_FPM_GUIBB_SEARCH:通用搜索UI构建块,搜索组件UIBB的基础接口&…

期末复习GGG-----查找子串

郭的 char *search( char *s, char *t ){int i0;while(s[i]){int j0;if(s[i]t[0]){while(s[ij]t[j]&&t[j]){j;}if(t[j]\0)return si;}i;}return NULL; } AI的 #include <stdio.h> #include <string.h> #define MAXS 30char *search(char *s, char *t);in…

ctfshow web七夕杯

web签到 执行命令没有回显&#xff0c;我们直接写文件就可以了 有字符长度限制 ls />a nl /*>a访问url/api/a下载文件 easy_calc <?phpif(check($code)){eval($result."$code".";");echo($result); }function check(&$code){$num1…

Golang | Leetcode Golang题解之第164题最大间距

题目&#xff1a; 题解&#xff1a; type pair struct{ min, max int }func maximumGap(nums []int) (ans int) {n : len(nums)if n < 2 {return}minVal : min(nums...)maxVal : max(nums...)d : max(1, (maxVal-minVal)/(n-1))bucketSize : (maxVal-minVal)/d 1// 存储 (…

aasist-bladedisc 音频反欺骗算法模型

AASIST 论文 参考ASIST: Audio Anti-Spoofing using Integrated Spectro-Temporal Graph Attention Networks https://arxiv.org/pdf/2110.01200.pdf 模型结构 aasist是一种开源的音频反欺诈的模型&#xff0c;主要的模型结构如下所示&#xff1a; 算法原理 环境配置 Dock…

CVE-2023-38836(文件上传+命令执行)

简介 BoidCMS v.2.0.0 存在文件上传漏洞&#xff0c;远程攻击者可通过添加 GIF 头部绕过 MIME 类型检查&#xff0c;执行任意代码。 过程 打开靶场 对网站进行目录扫描 发现后台&#xff0c;登录弱口令账号密码 admin/password 发现文件上传位置 根据简介提示&#xff0c;…

CentOS 7.9检测硬盘坏区、实物定位(三)

系列文章目录 CentOS 7.9上创建JBOD&#xff08;一&#xff09; CentOS 7.9上创建的JBOD阵列恢复&#xff08;二&#xff09; 文章目录 系列文章目录前言一、在系统中找到硬盘对应的盘符二、使用命令定位实物1.badblocks检测坏块2.对2T以上的硬盘检测&#xff08;对本篇非必要…

我用chatgpt写了一款程序

众所周知&#xff0c;Chatgpt能够帮助人们写代码&#xff0c;前几天苏音试着完全用Chatgpt写一款Python程序 有一句话我很赞同&#xff0c;未来能代替人的不是AI&#xff0c;是会使用AI的人。 最终&#xff0c;写下来效果还不错&#xff0c;完全提升了我的办公效率。 开发前…

0X0-基于Sklearn的机器学习入门:聚类(上)

本节及后续章节将介绍深度学习中的几种聚类算法&#xff0c;所选方法都在Sklearn库中聚类模块有具体实现。本节为上篇&#xff0c;将介绍几种相对基础的聚类算法&#xff0c;包括K-均值算法和均值漂移算法。 目录 X.1 聚类概述 X.1.1 聚类的种类 X.1.2 Sklearn聚类子模块 …

设计模式1

1、面向对象三大特性&#xff1a;封装、继承、多态 2、什么是接口&#xff1f; 3、面向对象的SOLID五大原则 4、简单工厂模式 5、工厂方法模式

网络安全:数据库安全性

文章目录 网络安全&#xff1a;数据库安全性引言数据库安全性的重要性常见的数据库安全威胁数据库安全性的最佳实践数据加密访问控制审计和监控 结语 网络安全&#xff1a;数据库安全性 引言 在前两篇文章中&#xff0c;我们讨论了SQL注入的概念和防范措施。本篇文章将聚焦于…

又一个SQL Developer中调试存储过程的例子

此例基于OBE&#xff08;Oracle By Example&#xff09;的示例。是在SQL Developer中调试存储过程一文的进阶。复习了前文的一些基本概念&#xff0c;并纠正了官方示例的一个错误。 本文使用的是标准的HR 示例 Schema&#xff0c;调试的存储过程源代码如下&#xff1a; CREAT…

【PB案例学习笔记】-22制作一个语音朗读金额小应用

写在前面 这是PB案例学习笔记系列文章的第22篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gite…

关于在word中使用Axmath的报错的解决

介绍 Axmath是数学公式编辑器软件。官网如下。 AxMath/AxGlyph/AxCells (amyxun.com) 支持正版。 在word中使用Axmath 点击word中的“文件”→“选项”。 选择“加载项” 选择“word加载项” 在Axmath默认的安装目录如下&#xff1a; C:\Program Files (x86)\AxMathhao&am…

【头歌】HBase扫描与过滤答案 解除复制粘贴限制

解除复制粘贴限制 当作者遇到这个限制的时候火气起来了三分&#xff0c;然后去网上搜索答案&#xff0c;然后发现了一位【碳烤小肥肠】居然不贴代码&#xff0c;XX链接&#xff0c;贴截图&#xff0c;瞬时火气冲顶&#xff0c;怒写此文 首先启动万能的控制台&#xff0c;然后C…

5年Android 开发者的社招面经总结(值得你记录收藏)

4. 分别代表什么含义&#xff0c;他们有什么区别&#xff1f; 5. 了解过 Java 的集合吗&#xff1f; 6. 说说 HashMap 的底层实现原理&#xff1f; 7. ArrayList 和 LinkedList 的区别&#xff1f; 8. Java 集合中哪些是线程安全的&#xff1f; 9. JVM 的内存…

中年帕金森:守护健康,从容面对生活挑战

在快节奏的现代生活中&#xff0c;中年人群面临着越来越多的健康挑战。其中&#xff0c;帕金森病作为一种常见的神经系统疾病&#xff0c;逐渐引起了人们的关注。帕金森病不仅影响患者的身体健康&#xff0c;还对其日常生活造成极大的困扰。那么&#xff0c;我们该如何应对中年…

智慧分流:探索互联网与物联网的负载均衡技术

数字化时代&#xff0c;个人认为&#xff0c;无论是互联网还是物联网&#xff0c;还是其他网&#xff0c;在各个层级&#xff0c;都对系统的稳定性和效率提出了更高的要求。负载均衡技术作为保障系统平稳运行的关键&#xff0c;其重要性不言而喻。在数字世界的海洋中&#xff0…

在哪里可以查到一手的标讯信息?

标讯信息集招投标讯息的简称。在市场上&#xff0c;标讯是一种非常关键的信息&#xff0c;包括招标公告&#xff0c;文件&#xff0c;截止日期等关键内容&#xff0c;便于需求方和供应商进行业务合作。 对于企业来说&#xff0c;及时获取到最新的标讯信息是非常重要的&#xf…

MySQL8新特性:窗口函数

目录 一、 概念二、语法基本语法语法解析进阶语法命名窗口WINDOW AS框架FRAME_CLAUSE 三、窗口函数ROW_NUMBERRANKDENSE_RANKPERCENT_RANKCUME_DISTFIRST_VALUE与LAST_VALUENTH_VALUELAG与LEADNTILE 四、窗口函数使用事项五、窗口函数优化方法六、面试常问&#xff08;持续更新…