分类别柱状图(Vue3)

效果图:

需求:男女年龄段占比

<template><div class="go-ClassifyBar01"><v-chartref="vChartRef":option="option"style="width: 100%; height: 800px"></v-chart></div>
</template><script setup lang="ts">
import { ref, reactive, watch, onMounted } from "vue";
import VChart from "vue-echarts";
import { use } from "echarts/core";
import { CanvasRenderer } from "echarts/renderers";
import { BarChart } from "echarts/charts";
import {GridComponent,TooltipComponent,LegendComponent,
} from "echarts/components";use([CanvasRenderer,BarChart,GridComponent,TooltipComponent,LegendComponent,
]);// 获取图表实例
const vChartRef = ref();// 定义数据类型
interface ChartDataItem {name: string;data: Array<{value: number;label: string;}>;
}// 模拟接口数据数组
const chartData = ref<ChartDataItem[]>([{name: "男性",data: [{ value: 5, label: "小于1岁" },{ value: 12, label: "1 ~ 9 岁" },{ value: 10, label: "10 ~ 19 岁" },{ value: 7, label: "20 ~ 29 岁" },{ value: 32, label: "30 ~ 39 岁" },{ value: 40, label: "40 ~ 49 岁" },{ value: 28, label: "50 ~ 59 岁" },{ value: 34, label: "大于60岁" },],},{name: "女性",data: [{ value: 8, label: "小于1岁" },{ value: 15, label: "1 ~ 9 岁" },{ value: 13, label: "10 ~ 19 岁" },{ value: 9, label: "20 ~ 29 岁" },{ value: 35, label: "30 ~ 39 岁" },{ value: 38, label: "40 ~ 49 岁" },{ value: 25, label: "50 ~ 59 岁" },{ value: 30, label: "大于60岁" },],},
]);const option = reactive({// 图位置定制grid: [{left: "12%",width: "28%",containLabel: true,bottom: 30,top: 30,},{left: "50%",width: "0%",bottom: 46,top: 30,},{right: "12%",width: "28%",containLabel: true,bottom: 30,top: 30,},],legend: {show: true,left: "center",top: 0,data: <any>[],},xAxis: [{type: "value",inverse: true,axisLabel: {show: true,color: "#000",margin: 8,},axisLine: {show: true,},axisTick: {show: false,},splitLine: {show: true,lineStyle: {type: "dashed",},},},{gridIndex: 1,show: true,splitLine: {show: true,lineStyle: {type: "dashed",},},axisLabel: {show: true,color: "#000",margin: 0,},},{gridIndex: 2,type: "value",axisLabel: {show: true,color: "#000",margin: 8,},axisLine: {show: true,},axisTick: {show: false,},splitLine: {show: true,lineStyle: {type: "dashed",},},},],yAxis: [{type: "category",position: "right",inverse: false,axisLine: {show: true,},axisTick: {show: false,},axisLabel: {show: false,},data: <any>[],},{type: "category",inverse: false,gridIndex: 1,position: "center",axisLabel: {align: "center",padding: [8, 0, 0, 0],fontSize: 12,color: "#000",},axisLine: {show: false,},axisTick: {show: false,},data: <any>[],},{type: "category",inverse: false,gridIndex: 2,position: "left",axisLabel: {show: false,},axisLine: {show: true,},axisTick: {show: false,},data: <any>[],},],series: [] as any[],
});// 更新图表数据
const updateChart = () => {if (!chartData.value.length) return;// 更新图例数据option.legend.data = chartData.value.map((item) => item.name);// 提取y轴标签(年龄段)const yAxisData = chartData.value[0].data.map((item) => item.label);// 更新y轴数据option.yAxis[0].data = yAxisData;option.yAxis[1].data = yAxisData;option.yAxis[2].data = yAxisData;// 动态生成系列数据option.series = chartData.value.map((item, index) => {if (index === 0) {return {type: "bar",name: item.name,barWidth: 12,label: {show: true,position: "left",color: "#000",fontWeight: "BoldMT",fontFamily: "Arial-BoldMT",fontSize: 14,formatter: "{c}%",},itemStyle: {color: "#0674F1FF",borderRadius: 0,},data: item.data.map((d) => d.value),};} else {return {xAxisIndex: 2,yAxisIndex: 2,type: "bar",name: item.name,barWidth: 12,label: {show: true,position: "right",color: "#000",fontWeight: "BoldMT",fontFamily: "Arial-BoldMT",fontSize: 14,formatter: "{c}%",},itemStyle: {color: "#E851B3FF",borderRadius: 0,},data: item.data.map((d) => d.value),};}});
};// 监听数据变化
watch(chartData,() => {updateChart();},{ immediate: true }
);// 组件挂载后更新图表
onMounted(() => {updateChart();
});
</script><style scoped>
.go-ClassifyBar01 {width: 100%;height: 100%;
}
</style>

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

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

相关文章

Apache Dubbo学习笔记-使用Dubbo发布、调用服务

Apache Dubbo经常作为一个RPC框架来使用&#xff0c;这篇文章主要介绍使用Dubbo配合注册中心来发布和调用服务。 Apache Dubbo和Spring Boot、JDK的版本对应关系。 Dubbo 分支最新版本JDKSpring Boot组件版本详细说明3.3.x (当前文档)3.3.08, 17, 212.x、3.x详情- 版本变更记录…

Python学习——字典和文件

前面python的学习中我们已经学习了python的函数和列表元组相关的内容&#xff0c;接下来我们来学习剩下的python语法&#xff1a;字典和文件 相关代码已经上传到作者的个人gitee&#xff1a;楼田莉子/Python 学习喜欢请点个赞谢谢 目录 字典 创建字典 查找key 新增/修改元素 …

swiper插件的使用

官方网址&#xff1a;https://www.swiper.com.cn/ 1、点击导航栏&#xff0c;获取Swiper里边的下载Swiper 2、选择要下载的版本【本次案例版本5.4.5】&#xff0c;然后解压缩文件夹&#xff0c;拿到swiper.min.js和swiper.min.css文件&#xff0c;放到项目对应的css文件和js文…

Vue3+JS 组合式 API 实战:从项目痛点到通用 Hook 封装

Vue3 组合式 API 的实战技巧 —— 组合式 API 帮我解决了不少 Options API 难以应对的问题&#xff0c;尤其是在代码复用和复杂组件维护上。一、为什么放弃 Options API&#xff1f;聊聊三年项目里的真实痛点​刚接触 Vue3 时&#xff0c;我曾因 “惯性” 继续用 Options API 写…

把 AI 塞进「电梯按钮」——基于 64 kB 零样本声纹的离线故障预测按钮

标签&#xff1a;零样本声纹、电梯按钮、离线 AI、TinyML、RISC-V、低功耗、GD32V303、故障预警 ---- 1. 背景&#xff1a;为什么按钮要「听声音」&#xff1f; 全国 700 万台电梯&#xff0c;按钮故障率 0.3 %/年&#xff0c;却常出现&#xff1a; • 机械卡滞、触点氧化&…

清华大学联合项目 论文解读 | MoTo赋能双臂机器人:实现零样本移动操作

研究背景 移动操作是机器人领域的核心挑战&#xff0c;它使机器人能够在各种任务和动态日常环境中为人类提供帮助。传统的移动操作方法由于缺乏大规模训练&#xff0c;往往难以在不同任务和环境中实现泛化。而现有操作基础模型虽在固定基座任务中表现出强泛化性&#xff0c;却无…

go webrtc - 2 webrtc重要概念

webrtc是一套音视频传输技术生态&#xff0c;不是一个协议或一个什么东西。3种模式本文基于 SFU 形式阐述&#xff01;重要概念&#xff1a;sfu 服务负责&#xff1a;信令 服务负责&#xff1a;peerConnection&#xff1a;track&#xff1a;房间&#xff1a;虚拟分组概念用户&a…

“下游任务”概念详解:从定义到应用场景

“下游任务”概念详解&#xff1a;从定义到应用场景 一、什么是“下游任务”&#xff1f; 在机器学习&#xff08;尤其是深度学习&#xff09;中&#xff0c;“下游任务”&#xff08;Downstream Task&#xff09;是相对“上游过程”而言的目标任务——可以理解为&#xff1a;我…

视频怎么做成 GIF?用 oCam 一键录制 GIF 动画超简单

GIF 动图因其生动直观、无需点击播放的特点&#xff0c;越来越受欢迎。你是否也曾看到一段有趣的视频&#xff0c;想把它做成 GIF 发给朋友或用在PPT里&#xff1f;其实&#xff0c;将视频片段转换为 GIF 并不需要复杂的视频剪辑技术&#xff0c;使用一款支持直接录制为 GIF 的…

Vue.config.js中的Webpack配置、优化及多页面应用开发

Vue.config.js中的Webpack配置、优化及多页面应用开发 在Vue CLI 3项目中&#xff0c;vue.config.js文件是工程化配置的核心入口&#xff0c;它通过集成Webpack配置、优化策略和多页面开发支持&#xff0c;为项目构建提供高度可定制化的解决方案。本文将从基础配置、性能优化、…

行业学习【电商】:直播电商的去头部化、矩阵号?

声明&#xff1a;以下部分内容含AI生成这两个词是当前直播电商和MCN领域的核心战略&#xff0c;理解了它们就理解了行业正在发生的深刻变化。一、如何理解“去头部化”&#xff1f;“去头部化” 指的是平台或MCN机构有意识地减少对超头部主播&#xff08;如曾经的李佳琦、薇娅&…

【MFC视图和窗口基础:文档/视图的“双胞胎”魔法 + 单文档程序】

大家好&#xff0c;我是你的MFC编程小伙伴&#xff01;学MFC就像探险古墓&#xff1a;到处是神秘的“房间”&#xff08;窗口&#xff09;和“宝藏”&#xff08;数据&#xff09;。今天咱们聊聊核心概念 – 视图、窗口和文档。这些是MFC的“骨架”&#xff0c;懂了它们&#x…

深度学习(六):代价函数的意义

在深度学习的浩瀚世界中&#xff0c;代价函数&#xff08;Cost Function&#xff09;&#xff0c;又称损失函数&#xff08;Loss Function&#xff09;或目标函数&#xff08;Objective Function&#xff09;&#xff0c;扮演着至关重要的角色&#xff0c;它就像一个导航员&…

Kable使用指南:Android BLE开发的现代化解决方案

概述 Kable&#xff08;com.juul.kable:core&#xff09;是一个专为Android蓝牙低功耗&#xff08;BLE&#xff09;开发设计的Kotlin协程友好库。它通过提供简洁的API和响应式编程模式&#xff0c;极大地简化了BLE设备交互的复杂性。本文将详细介绍Kable的使用方法&#xff0c;…

Android图案解锁绘制

使用到的库是Pattern Locker,根据示例进行了修改,把默认样式和自定义样式进行了合并调整。 设置密码 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xm…

Kotlin 协程之 Flow 的理解使用及源码解析

前言 在前面的文章中&#xff0c;我们已经讨论了 Channel 的概念和基本使用以及 Channel 的高阶应用。这篇我们来看日常开发中更常用的Flow。 “冷流” 和 “热流” 的本质 先来梳理一下所谓的 “冷流” 和 “热流”。 核心概念 我们已经知道 Channel 是 “热流”&#xff…

简述ajax、node.js、webpack、git

本系列可作为前端学习系列的笔记&#xff0c;HTML、CSS和JavaScript系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点赞关注不迷路&#xff01;您的点赞、关注和收藏是对小编最大的支持和鼓励&#xff01; 系列文章目录 简述ajax、…

经营帮会员经营:全方位助力企业高效发展,解锁商业新可能

在商业竞争愈发激烈的当下&#xff0c;企业若想脱颖而出&#xff0c;高效的经营管理体系至关重要。经营帮的会员经营板块&#xff0c;凭借丰富且实用的功能&#xff0c;为企业打造了一站式的经营助力平台&#xff0c;从多维度赋能企业&#xff0c;让发展之路更顺畅。会员经营与…

Vue 封装Input组件 双向通信

子组件<template><div class"box"><div class"box-left"><input blur"handleBlur" v-model"localInput" class"box-left-input"> </div><div class"box-right"><p style…

伽马(gamma)变换记录

此只记录伽马变换原理及其应用结果&#xff08;文章所有内容基于数字图像处理-冈萨雷斯&#xff09;&#xff0c;和直接用MATLAB代码生成伽马变换代码。一、原理伽马变换的公式很简答 就是一个有规律的幂运算 公式如下&#xff1a;一般在图像中进行应用是 C1 y为不同值时r的输…