F2图例封装 - Line

基于vue3 和 F2 3.5.0

<template><div :style="{ minHeight: `${height}px`, width: '100%' }" ref="container"><canvas v-show="showChart" :id="chartId" class="chart-canval"></canvas><empty-box v-show="!showChart"></empty-box></div>
</template><script setup lang="ts">
import { ref, onMounted } from 'vue';
import F2 from '@antv/f2/lib/index-all.js';const props = defineProps({height: {type: Number,default: 300,required: false},chartId: {type: String,default: 'LineChart'},color: {type: Array,default: ['#1890ff', '#6be58f', '#ffcb00', '#fd1063', '#7357F6FF', '#ED7E63FF', '#84BBF0FF', '#D364BBFF']},areaColor: {type: Array,// default: ['l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff', 'l(270) 0:#ffffff 0.5:#2fc25b 1:#6be58f', 'l(270) 0:#ffffff 0.5:#ffcb00 1:#ffcb00', 'l(270) 0:#ffffff 0.5:#fd1063 1:#fd1063']default: []},showLegend: {type: Boolean,default: true},legendPosition: {type: String,default: 'bottom'},unit: {type: String,default: '单位:%'},isTwoUnit: {type: Boolean,default: false},unit2: {type: String,default: '单位:%'},})const chart = ref()
const container = ref()
const showChart = ref(true)onMounted(() => {setTimeout(() => {const clientWidth = document.documentElement.clientWidthconst domWidth = container.value.clientWidthchart.value = new F2.Chart({id: props.chartId,width: domWidth || clientWidth,height: props.height,// appendPadding: [10, 25, 10, 10],pixelRatio: window.devicePixelRatio});}, 100);
})/*** @description: 折线图* @param {*} data 数据* @return {*}*/
const initChartTimeout = (data: any, unit?: String) => {if (data && data.length > 0) {showChart.value = trueif (chart.value) {chart.value.clear(); // 清理所有}chart.value.source(data, {xValue: {range: [0, 1],tickCount: 6}});if (!props.isTwoUnit) {chart.value.line().position('xValue*yValue').color('type', props.color).shape('s mooth')chart.value.tooltip({layout: 'vertical',offsetY: 110,background: {radius: 6,fill: '#1890FF',},nameStyle: {fontSize: 10,},valueStyle: {fontSize: 10,},onShow: function onShow(ev: any) {const items = ev.items;items.unshift({name: items[0].title,x: items[0].x,y: items[0].y,})}})chart.value.axis('xValue');chart.value.guide().text({top: true, // 是否绘制在 canvas 最上层,默认为 falseposition: ['min', 'max'], // 文本的起始位置,值为原始数据值,支持 callbackcontent: unit ? unit : props.unit,style: {// fill: '#000', // 文本颜色fontSize: '10', // 文本大小},offsetX: -15, // x 方向的偏移量offsetY: -20, // y 方向偏移量});} else {chart.value.line().position('xValue*yValue').color('type', props.color).shape('s mooth')chart.value.axis('xValue');chart.value.tooltip({layout: 'vertical',offsetY: 110,background: {radius: 6,fill: '#1890FF',},nameStyle: {fontSize: 10,},valueStyle: {fontSize: 10,},onChange(obj: any) {obj.items.splice(obj.items.findIndex((obj: any) => obj.name === "yValue2"), 1)obj.items.map((obj: any) => {if (obj.name === "出租率") {obj.value = obj.origin.yValue2.toString();}return obj;});},// onShow: function onShow(ev: any) {//   const items = ev.items;//   items.unshift({//     name: items[0].title,//     x: items[0].x,//     y: items[0].y,//   })// },})chart.value.line().position('xValue*yValue2').color('blue');chart.value.axis('yValue2');chart.value.guide().text({top: true, // 是否绘制在 canvas 最上层,默认为 falseposition: ['min', 'max'], // 文本的起始位置,值为原始数据值,支持 callbackcontent: unit ? unit : props.unit,style: {// fill: '#000', // 文本颜色fontSize: '10', // 文本大小},offsetX: -15, // x 方向的偏移量offsetY: -20, // y 方向偏移量});chart.value.guide().text({top: true, // 是否绘制在 canvas 最上层,默认为 falseposition: ['min', 'max'], // 文本的起始位置,值为原始数据值,支持 callbackcontent: unit ? unit : props.unit2,style: {// fill: '#000', // 文本颜色fontSize: '10', // 文本大小},offsetX: document.documentElement.clientWidth - 50, // x 方向的偏移量offsetY: -20, // y 方向偏移量});}if (props.showLegend) {chart.value.legend({position: props.legendPosition,align: 'center',itemWidth: null,itemFormatter: (val: any) => {console.log("val :",val)// if ( props.showLegendUnit ){//   return `${val}  ${mapNum[val]}${props.unit} ${mapRate[val]}%`;// } else {//   return `${val}  ${mapNum[val]}${props.unit}`;// }}})} else {chart.value.legend(false)}render()} else {showChart.value = false}};const initChart = (data: any, labelNumber?: any) => {setTimeout(() => {initChartTimeout(data, labelNumber)}, 100);
}const render = () => {chart.value.render();
}defineExpose({ initChart, chart, render })</script>

引用

<InitLineChart ref="comprehEvaChart" chartId="comprehEvaChart" :height="260" unit="分"/>
const initLineChart = (originalData: any) => {let chartData: any = []originalData.forEach((item: any) => {chartData.push({type: item.zoneName,xValue: item.syear,yValue: item.comprehEvaScore,})})comprehEvaChart.value.initChart(chartData)
}

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

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

相关文章

主数据管理是数字化转型成功的基石——江淮汽车案例分享

汽车行业数字化转型的背景 在新冠疫情导火索的影响下&#xff0c;经济全球化政治基础逐渐动摇。作为全球最大的汽车市场&#xff0c;我国的汽车市场逐渐由增量转为存量市场。 在数字化改革大背景下&#xff0c;随着工业4.0时代的到来&#xff0c;江淮汽车集团力争实现十四五数…

Object中的hashCode()

让hashcode方法的返回值为地址 vm参数中输入-XX:UnlockExperimentalVMOptions -XX:hashCode4&#xff0c;如下图&#xff1a; 参考 搞懂JAVAObject中的hashCode()_java_脚本之家 JDK核心JAVA源码解析(9) - hashcode 方法 - 知乎

《深入浅出 Spring Boot 3.x》预计3月份发版

各位&#xff0c;目前本来新书《深入浅出 Spring Boot 3.x》已经到了最后编辑排版阶段&#xff0c;即将在3月份发布。 目录&#xff1a; 现在把目录截取给大家&#xff1a; 主要内容&#xff1a; 本书内容安排如下。 ● 第 1 章和第 2 章讲解 Spring Boot 和传统 Spri…

并查集及应用

并查集的应用&#xff1a; 合并两个集合 查询某个元素的祖宗节点 扩展&#xff1a; 记录每个集合的大小&#xff08;绑定到根节点&#xff09; 记录每个点到根节点的距离&#xff08;绑定到每个元素上&#xff09; 二元或多元判断的时候用到的两种方法&#xff1a;扩展域并查集…

怎么看伦敦银走势图?这个信号威力无穷.....

伦敦银走势图中的黄金交叉是一种特殊的技术信号&#xff0c;它一般是指较短期的移动平均线向上穿越较长期的移动平均线。在许多情况下&#xff0c;金叉都被视为看涨的信号&#xff0c;因为移动平均线所衡量的是银价在某个时段内的均价——从这个角度看&#xff0c;短期平均线位…

时域离散信号的产生

时域离散信号的产生 函数汇总信号产生 单位抽样序列 \textcolor{plum}{\small \text{单位抽样序列}} 单位抽样序列 单位阶跃序列 \textcolor{plum}{\small 单位阶跃序列} 单位阶跃序列 正余弦序列 \textcolor{plum}{\small 正余弦序列} 正余弦序列 锯齿波三角波序列 \textcolor…

H5多用途的产品介绍展示单页HTML5静态网页模板

H5多用途的产品介绍展示单页HTML5静态网页模板 源码介绍&#xff1a;一款H5自适应多用途的产品介绍展示单页HTML静态网页模板&#xff0c;可用于团队官网、产品官网。 下载地址&#xff1a; https://www.changyouzuhao.cn/13534.html

HTTPS对HTTP的加密过程

1、HTTPS是在HTTP的基础上&#xff0c;引入了一个加密层&#xff08;SSL&#xff09;&#xff0c;对数据进行保护&#xff0c;HTTP 是明文传输的&#xff08;不安全&#xff0c;很可能会被运营商通过referer劫持&#xff0c;或者黑客通过修改链接来窃数据&#xff09; 2、加密…

js:通过input标签或Drag拖拽文件实现浏览器文件上传获取File文件对象

文档 https://developer.mozilla.org/zh-CN/docs/Web/API/Filehttps://developer.mozilla.org/zh-CN/docs/Web/API/HTMLElement/drag_event 通过读取文件可以获取File对象的信息 lastModified: 1707210706000 lastModifiedDate: Tue Feb 06 2024 17:11:46 GMT0800 (中国标准…

API接口技术开发拼多多API获取宝贝详情页实时数据、原价、销量、主图、优惠券等参数可支持高并发调用接入演示

拼多多的API接口技术可以用于开发能够获取商品详情页实时数据、原价、销量、主图、优惠券等参数的应用程序&#xff0c;并支持高并发调用。以下是一些关于如何实现这一功能的分析&#xff1a; 注册和认证&#xff1a;您需要在开放平台注册账号&#xff0c;并完成必要的实名认证…

Directional coupler and Synchronous optical coupling(定向耦合器和同步光耦合)

Directional coupler and Synchronous optical coupler 正文DC 示意图 正文 DC 示意图 如上图所示是一个 Directional Coupler(DC) 的示意图&#xff0c;当光波从左侧端口进入的时候&#xff0c;会在中间这个直波导部分发生耦合&#xff0c;在一个直波导内的光波会以帅世波的形…