vue3使用echarts绘制地图

vue3使用echarts绘制地图

  1. 安装echarts
npm install echarts
  1. 下载地图的json数据【我这里是把json数据单独粘出来然后新建了一个文件china.json】
    下载中国及各个省份的地图数据
  2. 引入
import chinaJson from './china.json'
  1. 绘制地图
<template><div ref="myChart" style="width: 1000px; height: 1000px;"></div>
</template>
<script setup>
import * as echarts from 'echarts'
import chinaJson from './china.json'
import { ref, onMounted } from 'vue'
const myChart = ref(null)onMounted(() => {const myECharts = echarts.init(myChart.value);echarts.registerMap('china', chinaJson);var option;function randomData() {return Math.round(Math.random() * 1000);}var data = [{name: '北京',value1: randomData(),value2: randomData(),}, {name: '天津',value1: randomData(),value2: randomData(),}, {name: '上海',value1: randomData(),value2: randomData(),}, {name: '重庆',value1: randomData(),value2: randomData(),}, {name: '河北',value1: randomData(),value2: randomData(),}, {name: '河南',value1: randomData(),value2: randomData(),}, {name: '云南',value1: randomData(),value2: randomData(),}, {name: '辽宁',value1: randomData(),value2: randomData(),}, {name: '黑龙江',value1: randomData(),value2: randomData(),}, {name: '湖南',value1: randomData(),value2: randomData(),}, {name: '安徽',value1: randomData(),value2: randomData(),}, {name: '山东',value1: randomData(),value2: randomData(),}, {name: '新疆',value1: randomData(),value2: randomData(),}, {name: '江苏',value1: randomData(),value2: randomData(),}, {name: '浙江',value1: randomData(),value2: randomData(),}, {name: '江西',value1: randomData(),value2: randomData(),}, {name: '湖北',value1: randomData(),value2: randomData(),}, {name: '广西',value1: randomData(),value2: randomData(),}, {name: '甘肃',value1: randomData(),value2: randomData(),}, {name: '山西',value1: randomData(),value2: randomData(),}, {name: '内蒙古',value1: randomData(),value2: randomData(),}, {name: '陕西',value1: randomData(),value2: randomData(),}, {name: '吉林',value1: randomData(),value2: randomData(),}, {name: '福建',value1: randomData(),value2: randomData(),}, {name: '贵州',value1: randomData(),value2: randomData(),}, {name: '广东',value1: randomData(),value2: randomData(),}, {name: '青海',value1: randomData(),value2: randomData(),}, {name: '西藏',value1: randomData(),value2: randomData(),}, {name: '四川',value1: randomData(),value2: randomData(),}, {name: '宁夏',value1: randomData(),value2: randomData(),}, {name: '海南',value1: randomData(),value2: randomData(),}, {name: '台湾',value1: randomData(),value2: randomData(),}, {name: '香港',value1: randomData(),value2: randomData(),}, {name: '澳门',value1: randomData(),value2: randomData(),}];var resultdata0 = [];var resultdata1 = [];var resultdata2 = [];var sum0 = 0;var sum1 = 0;var sum2 = 0;var titledata = [];for (var i = 0; i < data.length; i++) {var d0 = {name: data[i].name,value: data[i].value1 + data[i].value2};var d1 = {name: data[i].name,value: data[i].value1};var d2 = {name: data[i].name,value: data[i].value2};titledata.push(data[i].name)resultdata0.push(d0);resultdata1.push(d1);resultdata2.push(d2);sum0 += data[i].value1 + data[i].value2;sum1 += data[i].value1;sum2 += data[i].value2;}function NumDescSort(a, b) {return a.value - b.value;}resultdata0.sort(NumDescSort);resultdata1.sort(NumDescSort);resultdata2.sort(NumDescSort);option = {title: [{text: '销售量统计',subtext: '纯属虚构',left: 'center'}, {text: '全部: ' + sum0,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}}, {text: "门板: " + sum1,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}}, {text: "拼框门: " + sum2,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}},],tooltip: {trigger: 'item'},legend: {orient: 'vertical',left: 'left',data: ['全部', '门板', '拼框门'],selectedMode: 'single',},visualMap: {min: 0,max: 2500,left: 'left',top: 'bottom',text: ['高', '低'],calculable: true,colorLightness: [0.2, 100],color: ['#c05050', '#e5cf0d', '#5ab1ef'],dimension: 0},toolbox: {show: true,orient: 'vertical',left: 'right',top: 'center',feature: {dataView: {readOnly: false},restore: {},saveAsImage: {}}},grid: {right: 40,top: 100,bottom: 40,width: '30%'},xAxis: [{position: 'top',type: 'value',boundaryGap: false,splitLine: {show: false},axisLine: {show: false},axisTick: {show: false},}],yAxis: [{type: 'category',data: titledata,axisTick: {alignWithLabel: true}}],series: [{z: 1,name: '全部',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.75,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata0}, {z: 1,name: '门板',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.75,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata1}, {z: 1,name: '拼框门',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.85,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata2}, {name: '全部',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true,}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata0}, {name: '门板',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata1}, {name: '拼框门',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata2}, {name: '全部',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true,}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata0}, {name: '门板',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata1}, {name: '拼框门',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata2}]};option && myECharts.setOption(option)
})</script>
<style></style><!-- <template ><div :id="id" :style="{ width: width, height: height }"></div>
</template>
<script setup>
import * as echarts from 'echarts'
import { onMounted, watch} from 'vue'
const props = defineProps({id: {type: String,default: 'myChart'},width: {type: String,default: '100%'},height: {type: String,default: '100%'},option: {type: Object,default: () => { }}
})
let myChart = null;
watch(props.option, () => {drawEcharts();
})
onMounted(() => {drawEcharts();
});
function drawEcharts() {myChart = echarts.init(document.getElementById(props.id));let option = props.option;option && myChart.setOption(option);}</script>
<style></style> -->

实现效果如下图:【上述代码使用的是可视化社区里的这个案例,如有需要自行按需更改即可!】
在这里插入图片描述
5. 封装echarts【具体封装流程可参考博客】

<template ><div :id="id" :style="{ width: width, height: height }"></div>
</template>
<script setup>
import * as echarts from 'echarts'
import { onMounted, watch } from 'vue'
import chinaJson from './china.json'
const props = defineProps({id: {type: String,default: 'myChart'},width: {type: String,default: '100%'},height: {type: String,default: '100%'},option: {type: Object,default: () => { }}
})
let myChart = null;
watch(props.option, () => {drawEcharts();
})
onMounted(() => {drawEcharts();
});
function drawEcharts() {myChart = echarts.init(document.getElementById(props.id));echarts.registerMap('china', chinaJson);let option = props.option;option && myChart.setOption(option);}</script>
<style></style>
  1. 直接在父组件中使用
<script setup>
import Echarts from './components/Echarts.vue';
import { ref, onMounted } from 'vue';
function randomData() {return Math.round(Math.random() * 1000);
}var data = [{name: '北京',value1: randomData(),value2: randomData(),
}, {name: '天津',value1: randomData(),value2: randomData(),
}, {name: '上海',value1: randomData(),value2: randomData(),
}, {name: '重庆',value1: randomData(),value2: randomData(),
}, {name: '河北',value1: randomData(),value2: randomData(),
}, {name: '河南',value1: randomData(),value2: randomData(),
}, {name: '云南',value1: randomData(),value2: randomData(),
}, {name: '辽宁',value1: randomData(),value2: randomData(),
}, {name: '黑龙江',value1: randomData(),value2: randomData(),
}, {name: '湖南',value1: randomData(),value2: randomData(),
}, {name: '安徽',value1: randomData(),value2: randomData(),
}, {name: '山东',value1: randomData(),value2: randomData(),
}, {name: '新疆',value1: randomData(),value2: randomData(),
}, {name: '江苏',value1: randomData(),value2: randomData(),
}, {name: '浙江',value1: randomData(),value2: randomData(),
}, {name: '江西',value1: randomData(),value2: randomData(),
}, {name: '湖北',value1: randomData(),value2: randomData(),
}, {name: '广西',value1: randomData(),value2: randomData(),
}, {name: '甘肃',value1: randomData(),value2: randomData(),
}, {name: '山西',value1: randomData(),value2: randomData(),
}, {name: '内蒙古',value1: randomData(),value2: randomData(),
}, {name: '陕西',value1: randomData(),value2: randomData(),
}, {name: '吉林',value1: randomData(),value2: randomData(),
}, {name: '福建',value1: randomData(),value2: randomData(),
}, {name: '贵州',value1: randomData(),value2: randomData(),
}, {name: '广东',value1: randomData(),value2: randomData(),
}, {name: '青海',value1: randomData(),value2: randomData(),
}, {name: '西藏',value1: randomData(),value2: randomData(),
}, {name: '四川',value1: randomData(),value2: randomData(),
}, {name: '宁夏',value1: randomData(),value2: randomData(),
}, {name: '海南',value1: randomData(),value2: randomData(),
}, {name: '台湾',value1: randomData(),value2: randomData(),
}, {name: '香港',value1: randomData(),value2: randomData(),
}, {name: '澳门',value1: randomData(),value2: randomData(),
}];var resultdata0 = [];
var resultdata1 = [];
var resultdata2 = [];
var sum0 = 0;
var sum1 = 0;
var sum2 = 0;
var titledata = [];
for (var i = 0; i < data.length; i++) {var d0 = {name: data[i].name,value: data[i].value1 + data[i].value2};var d1 = {name: data[i].name,value: data[i].value1};var d2 = {name: data[i].name,value: data[i].value2};titledata.push(data[i].name)resultdata0.push(d0);resultdata1.push(d1);resultdata2.push(d2);sum0 += data[i].value1 + data[i].value2;sum1 += data[i].value1;sum2 += data[i].value2;
}function NumDescSort(a, b) {return a.value - b.value;
}resultdata0.sort(NumDescSort);
resultdata1.sort(NumDescSort);
resultdata2.sort(NumDescSort);const lineOption = ref({});
lineOption.value = {title: [{text: '销售量统计',subtext: '纯属虚构',left: 'center'}, {text: '全部: ' + sum0,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}}, {text: "门板: " + sum1,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}}, {text: "拼框门: " + sum2,right: 120,top: 40,width: 100,textStyle: {color: '#fff',fontSize: 16}},],tooltip: {trigger: 'item'},legend: {orient: 'vertical',left: 'left',data: ['全部', '门板', '拼框门'],selectedMode: 'single',},visualMap: {min: 0,max: 2500,left: 'left',top: 'bottom',text: ['高', '低'],calculable: true,colorLightness: [0.2, 100],color: ['#c05050', '#e5cf0d', '#5ab1ef'],dimension: 0},toolbox: {show: true,orient: 'vertical',left: 'right',top: 'center',feature: {dataView: {readOnly: false},restore: {},saveAsImage: {}}},grid: {right: 40,top: 100,bottom: 40,width: '30%'},xAxis: [{position: 'top',type: 'value',boundaryGap: false,splitLine: {show: false},axisLine: {show: false},axisTick: {show: false},}],yAxis: [{type: 'category',data: titledata,axisTick: {alignWithLabel: true}}],series: [{z: 1,name: '全部',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.75,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata0}, {z: 1,name: '门板',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.75,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata1}, {z: 1,name: '拼框门',type: 'map',map: 'china',left: '10',right: '35%',top: 100,bottom: "35%",zoom: 0.85,label: {normal: {show: true},emphasis: {show: true}},//roam: true,data: resultdata2}, {name: '全部',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true,}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata0}, {name: '门板',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata1}, {name: '拼框门',z: 2,type: 'bar',label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata2}, {name: '全部',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true,}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata0}, {name: '门板',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata1}, {name: '拼框门',z: 2,type: 'pie',radius: ['17%', '25%'],center: ['30%', '82.5%'],label: {normal: {show: true},emphasis: {show: true}},itemStyle: {emphasis: {color: "rgb(254,153,78)"}},data: resultdata2}]
};
</script><template><Echarts :width="'90vw'" :height="'90vh'" :option="lineOption" id="line" />
</template>

实现效果同上

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

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

相关文章

JVM(3)

垃圾回收(GC)相关 在C/C中,当我们使用类似于malloc的内存开辟,还需要手动释放内存空间,这样的机制在使用时给我们造成了诸多不便,但在Java中,有垃圾回收这样的机制,这就是指:我们不再需要手动释放,程序会自动判定,某个内存空间是否可以继续使用,如果内存不使用了,就会自动释放…

数据抽取平台pydatax介绍--实现和项目使用

数据抽取平台pydatax实现过程中&#xff0c;有2个关键点&#xff1a; 1、是否能在python3中调用执行datax任务&#xff0c;自己测试了一下可以&#xff0c;代码如下&#xff1a; 这个str1就是配置的shell文件 try:result os.popen(str1).read() except Exception as …

【附学习笔记合集】零基础自学网络安全,从入门到精通,还学不会我退出网安圈!

一、自学网络安全学习的误区和陷阱 1.不要试图先以编程为基础的学习再开始学习 我在之前的回答中&#xff0c;我都一再强调不要以编程为基础再开始学习网络安全&#xff0c;一般来说&#xff0c;学习编程不但学习周期长&#xff0c;而且实际向安全过渡后可用到的关键知识并不…

面试经典150题——插入区间

"The future belongs to those who believe in the beauty of their dreams." - Eleanor Roosevelt 1. 题目描述 2. 题目分析与解析 2.1 思路一 解决这个问题的思路是基于区间排序和合并的经典算法。这个问题的关键在于如何处理新区间与现有区间的关系&#xff0c…

测评ONLYOFFICE 8.0版本:办公利器再升级

测评ONLYOFFICE 8.0版本&#xff1a;办公利器再升级 前言注册使用升级功能速览全新外观设计wordexcelPPTPDF 协作功能强化更强大的功能复杂表单的填写 移动端优化结语 前言 随着科技的不断发展&#xff0c;办公软件在提升用户体验和工作效率方面扮演着越来越重要的角色。作为一…

18V/5A桥式驱动芯片-SS6285L兼容替代RZ7889

SS6285L是一款由工采网代理的率能DC双向马达驱动电路芯片&#xff1b;该芯片采用SOP8封装&#xff0c;符合ROHS规范&#xff0c;引脚框架100%无铅&#xff1b;它适用于玩具等类的电机驱动、自动阀门电机驱动、电磁门锁驱动等应用。 &#xff08;1&#xff09;产品描述&#xff…

二叉树(C/C++)

本篇将较为详细的介绍二叉树的相关知识&#xff0c;以及二叉树的实现。对于二叉树的相关知识&#xff0c;本篇介绍了其概念、特殊的二叉树、性质还有存储结构。 接着对于实现二叉树的每个函数都有其思路讲解&#xff0c;主要的函数分为&#xff1a;遍历&#xff1a;前中后序遍历…

QT Mingw编译ffmpeg源码以及测试

文章目录 前言下载msys2ysamFFmpeg 搭建编译环境安装msys2安装QT Mingw编译器到msys环境中安装ysam测试 编译FFmpeg 前言 FFmpeg不像VLC有支持QT的库文件&#xff0c;它仅提供源码&#xff0c;需要使用者自行编译成对应的库&#xff0c;当使用QTFFmpeg实现播放视频以及视频流时…

LVS+Keepalived高可用群集

一、Keepalived简介 Keepalived 软件起初是专为LVS负载均衡软件设计的&#xff0c;用来管理并监控LVS集群系统中各个服务节点的状态&#xff0c;后来又加入了可以实现高可用的VRRP功能。因此&#xff0c;Keepalived除了能够管理LVS软件外&#xff0c;还可以作为其他服务&…

Vue NextTick工作原理及使用场景

$nextTick的定义及理解&#xff1a; 定义&#xff1a;在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操…

springboot集成quartz定时任务并接入后台管理系统(copy即用)

说明:项目启动后会根据设置的时间进行执行,业务代码根据自己的需求更改,数据库文件在最后(记得清空数据库哦~)这里需要注意的一点就是className字段表示的是下面的对应的DynamicTask的路径如:com.example.demo.quartz.task.DynamicTask,如有多个定时任务copy并更改Dynam…

团结引擎——DotNet Wasm方案

参考&#xff1a;团结引擎 DotNet WebAssembly(Wasm) 介绍 一、当前编译流程 通过IL2CPP将C#转成C/C&#xff1b;通过Emscripen将C/C转成WebAssembly&#xff1b; 二、 当前存在问题 IL2CPP在处理类似泛型、反射结构时&#xff0c;由于缺少运行时信息&#xff0c;必须全量生…

程序员面试技巧分享

目录 前言1 自我介绍的艺术1.1 简明扼要1.2 强调独特之处1.3 项目亮点突显1.4 结合公司文化 2 技术问题回答的技巧2.1 明确问题理解2.2 结构清晰的回答2.3 强调解决问题的方法 3 团队协作经验的展示3.1 共享成功经验&#xff1a;3.2 强调沟通和解决冲突的能力&#xff1a; 结语…

基础!!!吴恩达deeplearning.ai:卷积层

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 回顾——密集层 Dense Layer卷积层 Convolutional Neural Network定义优势具体说明心电图卷积层搭建 到目前为止&#xff0c;你使用的所有神经网络层都是密集层类型&#xff0c;这…

用快代理换Ip爬取boss直聘招聘信息

import requests import random from prettytable import PrettyTable tb PrettyTable() tb.field_names [区域,详情页链接,领导,经营领域,公司名,招聘人数,学历要求,工作经验要求,职位名称,期望薪资,技能要求,福利]headers {"User-Agent":"Mozilla/5.0 (Win…

跳跃游戏Ⅱ

问题 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - …

独立分体式比例阀控制器

比例阀放大器的主要作用是对比例阀进行控制&#xff0c;它产生所需的电信号&#xff0c;并对这些信号进行综合、比较、校正和放大。这样的设备通常包括稳压电源、颤振信号发生器等&#xff0c;以确保比例阀能够准确地响应控制指令。外置模块式的设计使得这种放大器可以方便地与…

windows系统下安装RabbitMQ

一、RabbitMQ安装软件资源准备 因为RabbitMQ是Erlang语言开发的&#xff0c;因此安装Erlang环境在进行安装RbbitMQ的操作&#xff0c;选择两者版本时一定要参考版本的兼容性 1.RabbitMQ国内下载地址&#xff0c;因官网下载比较缓慢&#xff0c;还是国内的稍微快些 https://r…

【日常聊聊】程序员的金三银四

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;面试技巧分享 方向二&#xff1a;面试题解析 方向三&#xff1a;公司文化解读 方向四&#xff1a;职业规…

Spring篇----第十四篇

系列文章目录 文章目录 系列文章目录前言一、介绍一下 WebApplicationContext二、什么是 spring?三、使用 Spring 框架的好处是什么?四、Spring 由哪些模块组成?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…