当前位置: 首页 > news >正文

鸿蒙HarmonyOS-图表应用

简介

        随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中,一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库,它为开发者提供了丰富的功能和灵活性,使得创建各种类型的图表变得轻而易举。

效果图

特性与优势

  1. 多样的图表类型: MPChart支持多种图表类型,从基本的折线图、柱状图、圆饼图、散点图到更复杂的蜡烛图雷达图瀑布图和组合图等开发者可以根据项目需要选择最适合的图表类型。
  2. 高度可定制: 该库允许开发者通过代码自定义图表的外观和行为,从而实现个性化的设计可以定制图表的颜色、字体、坐标轴样式等,以满足项目的UI需求。
  3. 动画效果: MPChart内置了丰富的动画效果,使得图表的展示更加生动有趣。这不仅提升了用户体验,也使得数据的变化更加直观。

使用说明

下面以曲线图为例,详细说明如何使用。

首先需要下载和安装MPChart 库,可以通过以下命令完成:

ohpm install @ohos/mpchart

然后新建一个页面,在页面中写以下代码:

1. 数据对象声明

在使用该曲线图表组件之前,首先声明需要用到的一些数据对象包括图表的x轴,y轴,宽高,偏移量,数据、model类 

topAxis: XAxis = new XAxis(); //顶部X轴
bottomAxis: XAxis = new XAxis(); //底部X轴
leftAxis: YAxis | null = null; //左边y轴
rightAxis: YAxis | null = null; //右边y轴mWidth: number = 350; //表的宽度
mHeight: number = 300; //表的高度
minOffset: number = 15; //X轴线偏移量lineData: LineData | null = null; //曲线数据
@State lineChartModel: LineChartModel = new LineChartModel(); //图表model类

2.初始化数据

(1)初始化曲线数据

this.lineData = this.initCurveData(45, 180);

通过调用 initCurveData 函数,实现曲线图表所需数据的初始化。该函数生成随机曲线数据点,并通过设置渐变填充颜色提升了图表的视觉效果。详细内容请查看相关代码和注释:

/*** 初始化数据* @param count 曲线图点的个数* @param range y轴范围* @returns LineData 曲线图数据对象*/
private initCurveData(count: number, range: number): LineData {// 创建存储曲线数据点的列表let values = new JArrayList<EntryOhos>();// 生成随机曲线数据点for (let i = 0; i < count; i++) {let val: number = Math.random() * (range + 1) + 20;values.add(new EntryOhos(i, val));}// 渐变填充颜色设置let gradientFillColor = new Array<ColorStop>();gradientFillColor.push(['#ffffffff', 0.3]);gradientFillColor.push(['#0000ffff', 1.0]);// 创建曲线数据集列表let dataSet = new JArrayList<ILineDataSet>();// 创建曲线数据集let set1 = new LineDataSet(values, "DataSet 1");set1.setDrawFilled(true); //设置是否绘制填充set1.setDrawValues(false); //设置是否绘制数值set1.setMode(Mode.CUBIC_BEZIER); //设置贝塞尔曲线模式set1.setGradientFillColor(gradientFillColor);//渐变色填充           set1.setColorByColor(Color.Black);//设置数据点颜色set1.setLineWidth(1); //设置线条宽度set1.setDrawCircles(false); //设置是否绘制数据点圆点// 将数据集添加到数据集列表dataSet.add(set1);// 返回曲线图数据对象return new LineData(dataSet);
}

2)设置x轴的参数

 //设置顶部轴的参数this.topAxis.setLabelCount(5, false);//设置轴的标签个数this.topAxis.setPosition(XAxisPosition.TOP);//设置轴的位置在顶部this.topAxis.setAxisMinimum(0);//设置轴的最小值this.topAxis.setAxisMaximum(44);//设置轴的最大值this.topAxis.setDrawGridLines(true);//设置是否绘制网格线//设置底部轴的参数this.bottomAxis.setLabelCount(5, false);//设置轴的标签个数this.bottomAxis.setPosition(XAxisPosition.BOTTOM);//设置轴的位置在底部this.bottomAxis.setAxisMinimum(0);//设置轴的最小值this.bottomAxis.setAxisMaximum(44);//设置轴的最大值this.bottomAxis.setDrawAxisLine(true);//设置是否绘制轴线this.bottomAxis.setDrawLabels(true);//设置是否绘制标签

在此阶段,顶部和底部 X 轴的相关参数被配置,包括标签个数、位置、最小值和最大值等。

3. 设置左右 Y 轴参数

this.leftAxis = new YAxis(AxisDependency.LEFT);//设置轴位置
this.leftAxis.setLabelCount(7, false);//设置标签个数
this.leftAxis.setPosition(YAxisLabelPosition.OUTSIDE_CHART);//设置轴标签在图表外侧
this.leftAxis.setSpaceTop(15);//设置顶部距离
this.leftAxis.setAxisMinimum(-50);//设置轴的最小值
this.leftAxis.setAxisMaximum(200);//设置轴的最大值
this.leftAxis.enableGridDashedLine(5,5,0)//设置网格线虚线效果this.rightAxis = new YAxis(AxisDependency.RIGHT);//设置轴位置
this.rightAxis.setDrawGridLines(false);//设置是否绘制网格线
this.rightAxis.setLabelCount(7, false);//设置标签个数
this.rightAxis.setSpaceTop(11);//设置顶部距离
this.rightAxis.setAxisMinimum(-50); //设置轴的最小值
this.rightAxis.setAxisMaximum(200);//设置轴的最大值
this.rightAxis.setDrawAxisLine(true);//设置是否绘制轴线
this.rightAxis.setDrawLabels(true);//设置是否绘制标签

配置左边和右边 Y 轴的相关参数,包括标签个数、位置、顶部距离、最小值和最大值等。

4. 设置上下限制线

//上方限制线
let upperLimtLine:LimitLine= new LimitLine(150, "Upper Limit"); //设置线条位置和文字说明
upperLimtLine.setLineWidth(4); //设置线条宽度
upperLimtLine.enableDashedLine(5, 5, 0);//设置虚线效果
upperLimtLine.setLabelPosition(LimitLabelPosition.RIGHT_TOP);//设置文字说明的位置
upperLimtLine.setTextSize(10);//设置文字大小//下方限制线
let lowerLimtLine:LimitLine= new LimitLine(-30, "Lower Limit");
lowerLimtLine.setLineWidth(4);
lowerLimtLine.enableDashedLine(5, 5, 0);
lowerLimtLine.setLabelPosition(LimitLabelPosition.RIGHT_BOTTOM);
lowerLimtLine.setTextSize(10);

创建上方和下方的限制线对象,包括线宽、虚线效果、标签位置和字体大小等。

5. 添加限制线到左边 Y 轴

//添加两条限制线
this.leftAxis.addLimitLine(upperLimtLine);
this.leftAxis.addLimitLine(lowerLimtLine);

将上方和下方的限制线添加到左边的 Y 轴上,以完善图表的辅助线设置。

6. 设置图表的轴

//设置图表的顶部和底部轴
this.lineChartModel.setTopAxis(this.topAxis);
this.lineChartModel.setBottomAxis(this.bottomAxis);
//设置图表的左轴和右轴
this.lineChartModel.setLeftAxis(this.leftAxis);
this.lineChartModel.setRightAxis(this.rightAxis);

将设置好的轴对象分别传递给图表模型,确保轴线配置准确。

7. 设置图表的宽高和偏移量

//设置图表的宽高
this.lineChartModel.setWidth(this.mWidth);
this.lineChartModel.setHeight(this.mHeight);
//设置图表的偏移量
this.lineChartModel.setMinOffset(this.minOffset);

配置图表的宽度、高度和 X 轴线的偏移量,以适应特定的显示需求。

8. 设置图表的曲线数据并初始化图表

//设置图标数据
this.lineChartModel.setLineData(this.lineData);
//初始化图表
this.lineChartModel.init();

最后一步,添加数据到自定义曲线图表组件

最后,在构建UI时,将图表组件添加到布局中:

 build() {Stack({ alignContent: Alignment.TopStart }) {LineChart({lineChartModel: this.lineChartModel})}}

        通过以上步骤,可以轻松地将自定义曲线图表组件集成到应用程序中,并根据需要进行调整和扩展。最终的效果图如下:

 OpenHarmony ohpm 环境配置等更多内容,请参如何安装 OpenHarmony ohpm 包

源码链接

如果您对 MPChart 的源代码感兴趣或者希望看到更多的图表示例,可以在以下链接找到它的源码:

OpenHarmony-SIG/ohos-MPChart请随时查阅这些资源,以获取关于MPChart 的更多信息和详细说明。

相关文章:

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展&#xff0c;数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中&#xff0c;一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库&#xff0c;它为开发者提供了丰富的功能和灵活性&#xff0c;使得…...

elasticsearch 笔记三:查询建议介绍、Suggester、自动完成

一、查询建议介绍 1. 查询建议是什么&#xff1f; 查询建议&#xff0c;为用户提供良好的使用体验。主要包括&#xff1a; 拼写检查&#xff1b; 自动建议查询词&#xff08;自动补全&#xff09; 拼写检查如图&#xff1a; 自动建议查询词&#xff08;自动补全&#xff09;…...

【hyperledger-fabric】将智能合约部署到通道

简介 本文主要来自于B站视频教学视频&#xff0c;也主要参看了官方文档中下图这一章节。针对自己开发的代码做出相应的总结。 1.启动网络 # 跳转到指定的目录 cd /root/fabric/fabric-samples/test-network# 启动docker容器并且创建通道 ./network.sh up createChannel2.打…...

nginx设置跨域访问

目录 一&#xff1a;前端请求 二&#xff1a;后端设置 网站架构前端使用jquery请求&#xff0c;后端使用nginxphp-fpm 一&#xff1a;前端请求 <script> $.getJSON(http://nngzh.youjoy.com/cc.php, { openid: sd, }, function(res) { alert(res); if(res.code 0) …...

Go语言学习第二天

Go语言数组详解 var 数组变量名 [元素数量]Type 数组变量名&#xff1a;数组声明及使用时的变量名。 元素数量&#xff1a;数组的元素数量&#xff0c;可以是一个表达式&#xff0c;但最终通过编译期计算的结果必须是整型数值&#xff0c;元素数量不能含有到运行时才能确认大小…...

阿里云OpenSearch-LLM智能问答故障的一天

上周五使用阿里云开放搜索问答版时&#xff0c;故障了一整天&#xff0c;可能这个服务使用的人比较少&#xff0c;没有什么消息爆出来&#xff0c;特此记录下这几天的阿里云处理过程&#xff0c;不免让人怀疑阿里云整体都外包出去了&#xff0c;反应迟钝&#xff0c;水平业余&a…...

城市分站优化系统源码:提升百度关键排名 附带完整的搭建教程

城市分站优化已成为企业网络营销的重要手段&#xff0c;今天来给大家分享一款城市分站优化系统源码。 以下是部分代码示例&#xff1a; 系统特色功能一览&#xff1a; 1.多城市分站管理&#xff1a;该系统支持多个城市分站的管理&#xff0c;用户可以根据业务需求&#xff0c;…...

【华为OD题库-107】编码能力提升计划-java

题目 为了提升软件编码能力&#xff0c;小王制定了刷题计划&#xff0c;他选了题库中的n道题&#xff0c;编号从0到n-1&#xff0c;并计划在m天内按照题目编号顺序刷完所有的题目(注意&#xff0c;小王不能用多天完成同一题) 在小王刷题计划中&#xff0c;小王需要用time[i]的时…...

使用pytorch进行图像预处理的常用方法的详细解释

一般来说&#xff0c;我们在使用pytorch进行图像分类任务时都会对训练集数据做必要的格式转换和增广处理&#xff0c;对测试集做格式处理。 以下是常用的数据集处理函数&#xff1a; data_transform { "train": transforms.Compose([transforms.RandomResizedCro…...

天线根据什么进行分类

天线是信息化时代的一个标准&#xff0c;广播信号塔&#xff0c;通信基站塔&#xff0c;卫星天线还有每天都要用到的手机&#xff0c;都是含有天线的&#xff0c;只是各种天线的作用不同&#xff0c;大小不同。今天给大家说一下&#xff0c;天线是如何分类的。 1.按工作性质可…...

JavaScript:正则表达式

JavaScript&#xff1a;正则表达式 什么是正则表达式正则表达式语法定义正则表达式判断是否有匹配的字符串查找匹配的字符串 正则表达式匹配法则元字符边界符量词字符类 什么是正则表达式 正则表达式用于匹配字符串中字符的组合模式。 正则表达式会依据其自身语法&#xff0c;…...

【Linux】深挖进程地址空间

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟悉【Linux】进程地址空间 > 毒鸡汤&#xff…...

SVM(支持向量机)-机器学习

支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种用于分类和回归分析的监督学习算法。它属于机器学习中的一类强大而灵活的模型&#xff0c;广泛应用于模式识别、图像分类、自然语言处理等领域。 基本原理: SVM的基本原理是通过找到能够有效分…...

解决生成的insert语句内有单引号的情况

背景 因为Mybatis-Plus的saveBatch()方法的批量插入其实也是循环插入&#xff0c;而不是真正的一个SqlSession完成的批插&#xff0c;效率很低。所以我们在写批量插入的时候是自己实现了一个工具类去生成批量插入的sql再去执行&#xff0c;但是会遇到有些文本里有单引号导致插…...

【Linux 程序】1. 程序构建

文章目录 【 1. 配置 】【 2. 编译 】makefile编写的要点makefile中的全局自变量CMake编译依赖的库g编译 【 3. 安装 】 一般源代码提供的程序安装需要通过配置、编译、安装三个步骤&#xff1b; 配置。检查当前环境是否满足要安装软件的依赖关系&#xff0c;以及设置程序安装所…...

GLTF 编辑器实现逼真3D动物毛发效果

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 要实现逼真的3D动物毛发效果&#xff0c;可以采用以下技术和方法&…...

【Go语言入门:Go语言的方法,函数,接口】

文章目录 4.Go语言的方法&#xff0c;函数&#xff0c;接口4.1. 方法4.1.1. 指针接受者4.1.2. 值接收者和指针接收者有什么区别&#xff1f;4.1.3. 方法 4.2. 接口4.2.1. 接口定义 4.3. 函数4.3.1. 函数介绍 4.Go语言的方法&#xff0c;函数&#xff0c;接口 4.1. 方法 4.1.1…...

vue-cli3/webpack打包时去掉console.log调试信息

文章目录 前言一、terser-webpack-plugin是什么&#xff1f;二、使用配置vue-cli项目 前言 开发环境下&#xff0c;console.log调试信息&#xff0c;有助于我们找到错误&#xff0c;但在生产环境&#xff0c;不需要console.log打印调试信息&#xff0c;所以打包时需要将consol…...

企业品牌推广在国外媒体投放的意义和作用何在?

海外广告投放是企业在国际市场推广的重要战略&#xff0c;具有多种形式&#xff0c;包括社交媒体广告、短视频广告、电视广告等。这些广告形式在传播信息、推动销售、塑造品牌形象等方面发挥着独特的作用。 其中软文发稿是一种注重叙事和信息传递的广告形式&#xff0c;对于企…...

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时&#xff0c; 又是我们需要知道许多个shp字段的批量计算&#xff0c;例如计算shp的总面积、面积平均值等&#xff0c;但是单个查看shp文件的属性进行汇总过于繁琐&#xff0c;因此可以借助建模批处理来计算。 首先准备数据&#xff1a;一个含有多个shp的文件夹。…...

代码质量评价及设计原则

1.评价代码质量的标准 1.1 可维护性 可维护性强的代码指的是: 在不去破坏原有的代码设计以及不引入新的BUG的前提下,能够快速的修改或者新增代码. 不易维护的代码指的是: 在添加或者修改一些功能逻辑的时候,存在极大的引入新的BUG的风险,并且需要花费的时间也很长. 代码可…...

编程笔记 html5cssjs 012 HTML分块

编程笔记 html5&css&js 012 HTML分块 一、HTML 块级元素二、HTML 内联元素三、HTML <div> 元素四、HTML <span> 元素五、HTML<article>元素六、<article>元素和<div>元素的区别与联系小结 像报纸排版一样&#xff0c;很多时候需要把平面…...

【持续更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;2&#xff09;需求描述 &#xff08;3&#xff09;界面原型 &#xff08;4&#xff09;数据库设计 &#xff08;5&#xff09;后端工程 接下来我们使用uniappspringboot实现一个简单的前后端分离的小项目----个…...

nginx+rsyslog+kafka+clickhouse+grafana 实现nginx 网关监控

需求 我想做一个类似腾讯云网关日志最终以仪表方式呈现&#xff0c;比如说qps、p99、p95的请求响应时间等等 流程图 数据流转就像标题 nginx ----> rsyslog ----> kafka —> clickhouse —> grafana 部署 kafka kafka 相关部署这里不做赘述&#xff0c;只要创…...

User maven 通过什么命令能查到那个包依赖了slf4j-simple-1.7.36.jar

要在 Maven 项目中查找哪个包依赖了 slf4j-simple-1.7.36.jar&#xff0c;您可以使用 Maven 的依赖树命令 mvn dependency:tree。这个命令会展示项目所有依赖的层次结构&#xff0c;包括传递依赖&#xff08;即一个依赖的依赖&#xff09;。然后&#xff0c;您可以搜索或过滤输…...

什么牌子冻干猫粮性价比高?性价比高的五款冻干猫粮牌子推荐

很多养猫的小伙伴们都磨刀霍霍准备给猫咪屯些猫冻干吧&#xff0c;特别是家里有挑食猫咪的家庭。有养猫的铲屎官们应该都知道&#xff0c;猫咪是对蛋白质的需求量很高&#xff0c;而且对植物蛋白的吸收效率比较低&#xff0c;所以蛋白质最好都是来自动物的优质蛋白。猫咪挑食就…...

扫描全能王启动鸿蒙原生应用开发,系HarmonyOS NEXT智能扫描领域首批

近期&#xff0c;“鸿蒙合作签约暨扫描全能王鸿蒙原生应用开发启动仪式”&#xff08;简称“签约仪式”&#xff09;正式举行。合合信息与华为达成鸿蒙合作&#xff0c;旗下扫描全能王将基于HarmonyOS NEXT正式启动鸿蒙原生应用开发。据悉&#xff0c;扫描全能王是鸿蒙在智能扫…...

[Angular] 笔记 8:list/detail 页面以及@Input

1. list 页面 list/detail 是重要的 UI 设计模式。 vscode terminal 运行如下命令生成 detail 组件&#xff1a; PS D:\Angular\my-app> ng generate component pokemon-base/pokemon-detail --modulepokemon-base/pokemon-base.module.ts CREATE src/app/pokemon-base/p…...

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…...

Netty—Reactor线程模型详解

文章目录 前言线程模型基本介绍线程模型分类Reactor线程模型介绍Netty线程模型&#xff1a; 传统阻塞IO的缺点Reactor线程模型单Reactor单线程模式单Reactor多线程模式主从Reactor多线程Reactor 模式小结 Netty 线程模型案例说明&#xff1a;Netty核心组件简介ChannelPipeline与…...

十个实用网站网址/哪里有网络推广

题目描述 Description【问题描述】C 国有n 个大城市和m 条道路&#xff0c;每条道路连接这n 个城市中的某两个城市。任意两个城市之间最多只有一条道路直接相连。这m 条道路中有一部分为单向通行的道路&#xff0c;一部分为双向通行的道路&#xff0c;双向通行的道路在统计条数…...

阿里云二级域名网站怎么建设/网址导航下载到桌面

最近&#xff0c;用Python脚本提取&#xff0c;在基因号已知&#xff0c;位置已知条件下&#xff0c;相对应位置的基因序列时发现&#xff0c;这样很简单但是很实用的脚本&#xff0c;在网上却比较难找。而且&#xff0c;能被找到的脚本&#xff0c;相对于具有初级编程能力的人…...

怎么把网站提交给搜索引擎/手机百度账号申请注册

java中的输入总是伴随着异常(这是我的个人见解)&#xff0c;所以&#xff0c;用下面这个简单类&#xff0c;就简化了每次都要抛异常的问题。import java.io.*;public class Console{/**Reads a single double from the keyboard. Stops execution in case of error.return doub…...

学校网站建设模板/seo诊断书案例

javascript有许多内建的方法来产生对话框&#xff0c;如&#xff1a;window.alert(), window.confirm(),window.prompt().等。 然而IE提供更多的方法支持对话框。如&#xff1a; showModalDialog() (IE 4 支持) showModelessDialog() (IE 5 支持) window.showModalDialog()方法…...

杭州萧山网站建设/电商平台链接怎么弄

DataInputStream 是数据输入流。它继承于FilterInputStream。DataInputStream 是用来装饰其它输入流&#xff0c;它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读…...

做网站要考虑的问题/如何让百度搜索排名靠前

SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站&#xff1a;www.sqlskills.com&#xff0c;看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Day6-有关NULL位图的三个误区 char nchar varchar nvarchar的区别 在SQLSERVER内部有很多地方都使用…...