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.hqwc.cn/news/499307.html

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

相关文章

Windows WMI详解

WMI简介 WMI ( Windows Management Instrumentation, Windows管理规范)是Windows 2000/XP管理系统的核心&#xff0c;属于管理数据和操作的基础模块。设计WMI的初衷是达到一种通用性&#xff0c;通过WM操作系统、应用程序等来管理本地或者远程资源。它支持分布式组件对象模型(…

sora技术报告阅读

sora是一个在可变持续时间、分辨率和宽高比的视频和图像上联合训练文本条件扩散模型。 需要将所有类型的视觉数据转化为统一表示的方法&#xff0c;使得能够对生成模型进行大规模训练。 Sora是一个通用的视觉数据模型&#xff0c;它可以生成不同持续时间、宽高比和分辨率的视…

打造透明银行存储:Solidity智能合约的实践与探索

引言&#xff1a; 随着区块链技术的快速发展&#xff0c;智能合约作为其中的核心组件&#xff0c;正被越来越多地应用于各种场景。作为智能合约的编程语言&#xff0c;Solidity因其对以太坊平台的深度支持而备受关注。在这篇文章中&#xff0c;我们将通过构建一个透明的银行存储…

webrtc

stun服务 阿里云服务器安全组添加端口开放 webrtc-streamer视屏流服务器搭建 - 简书

docker安装单机版canal和使用

说明&#xff1a;我安装的组件架构如下&#xff1a; 1、准备一台虚拟机&#xff0c;192.168.2.223&#xff0c;我安装的时候&#xff0c;docker只支持canal1.1.6版本&#xff0c;1.1.7无法使用docker安装.还有一点要补充&#xff0c;就是1.1.6好像不支持es8.0以上版本&#x…

Java+SpringBoot,打造社区疫情信息新生态

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

FreeRTOS 信号量

目录 一、信号量的概念 二、二值信号量 1、二值信号量的定义 2、二值信号量的作用 3、二值信号量的操作 4、二值信号量操作实验 5、二值信号量会导致优先级翻转问题 三、互斥信号量 1、互斥信号量的引入 2、注意&#xff1a;互斥信号量不能用于中断服务函数中&#xf…

【STM32】STM32学习笔记-独立看门狗和窗口看门狗(47)

00. 目录 文章目录 00. 目录01. WDG概述02. 独立看门狗相关API2.1 IWDG_WriteAccessCmd2.2 IWDG_SetPrescaler2.3 IWDG_SetReload2.4 IWDG_ReloadCounter2.5 IWDG_Enable2.6 IWDG_GetFlagStatus2.7 RCC_GetFlagStatus 03. 独立看门狗接线图04. 独立看门狗程序示例105. 独立看门…

宝塔FTP服务设置并结合cpolar内网穿透实现远程传输文件

文章目录 1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固定FTP地址连接 宝塔FTP是宝塔面板中的一项功能&#xff0c;用于设置和管理FTP服务。通过宝塔FTP&#xff0c;用户可以创建FTP账号&#xff0c;配置FTP用户权限…

高级语言期末2011级B卷(计算机学院)

1.编写函数&#xff0c;实现按照如下公式计算的功能&#xff0c;其中n为自然数 #include <stdio.h>int fac(int n) {if(n0)return 1;elsereturn n*fac(n-1); }float fun(int n) {float flag;float sum0;for(int i0; i<n; i) {flagi/((i1)*fac(i2));sumflag;}return su…

无法调试MFC源码

VS无法调试MFC源码 起初 有时候就是这么无奈&#xff0c;MFC源码各种问题没有办法调试&#xff0c;可是又想看下代码如何调用&#xff0c;里面做了些什么&#xff0c;从哪儿调出&#xff0c;学习一下大神的思路什么的。整理一下有可能的原因。 检查生成代码设置 需要设置正…

Anroid开发过程中常见的异常及解决方法

本文总结了在android开发中一些常见的错误及异常&#xff0c;特此分享&#xff01; The import android cannot be resolved 错误 将android源码通过eclipse的import功能导入的话&#xff0c;如果出现了“The import android cannot be resolved”错误。不用着急&#xff0c;…