楼主: leogeyu
54 0

Vue3实战:混合柱状图与曲线图 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

80%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
30 点
帖子
2
精华
0
在线时间
0 小时
注册时间
2018-10-7
最后登录
2018-10-7

楼主
leogeyu 发表于 2025-11-13 16:27:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

在Vue3中绘制多系列柱状图与曲线图

数据可视化是现代前端开发中的重要部分,尤其是在需要展示多维度数据的场景下。Vue3结合ECharts或Chart.js等库,可以高效实现多系列柱状图与曲线图的混合展示。

技术选型与环境配置

ECharts作为百度开源的图表库,对复杂图表支持较好,适合多系列混合展示。通过Vue3的Composition API可以更灵活地管理图表状态。

安装依赖:

npm install echarts vue-echarts

全局注册组件(可选):

// main.js
import { createApp } from 'vue'
import ECharts from 'vue-echarts'
import 'echarts'

const app = createApp(App)
app.component('v-chart', ECharts)

基础图表组件封装

创建可复用的基础图表组件:

<template>
  <v-chart
    class="chart"
    :option="chartOption"
    :autoresize="true"
  />
</template>

<script setup>
import { ref } from 'vue'

const props = defineProps({
  chartData: {
    type: Object,
    required: true
  }
})

const chartOption = ref({})
</script>

<style scoped>
.chart {
  width: 100%;
  height: 400px;
}
</style>

多系列柱状图实现

配置包含三个数据系列的柱状图:

const initBarChart = () => {
  chartOption.value = {
    title: {
      text: '多系列柱状图示例'
    },
    tooltip: {
      trigger: 'axis'
    },
    legend: {
      data: ['系列A', '系列B', '系列C']
    },
    xAxis: {
      type: 'category',
     1月', '2月', '3月', '4月', '5月', '6月']
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        name: '系列A',
        type: 'bar',
       120, 200, 150, 80, 70, 110]
      },
      {
        name: '系列B',
        type: 'bar',
        data: [80, 150, 120, 200, 130, 90]
      },
      {
        name: '系列C',
        type: 'bar',
        data: [210, 180, 90, 110, 160, 150]
      }
    ]
  }
}

曲线图实现与混合

在柱状图基础上增加曲线系列:

const initMixedChart = () => {
  chartOption.value = {
    title: {
      text: '混合图表示例'
    },
    tooltip: {
      trigger: 'axis'
    },
    legend: {
      data: ['蒸发量', '降水量', '平均温度']
    },
    xAxis: {
      type: 'category',
     1月', '2月', '3月', '4月', '5月', '6月']
    },
    yAxis: [
      {
        type: 'value',
        name: '水量',
        min: 0,
        max: 250,
        interval: 50
      },
      {
        type: 'value',
        name: '温度',
        min: 0,
        max: 25,
        interval: 5
      }
    ],
    series: [
      {
        name: '蒸发量',
        type: 'bar',
        data: [20, 49, 70, 92, 129, 143]
      },
      {
        name: '降水量',
        type: 'bar',
       35, 52, 110, 137, 123, 103]
      },
      {
        name: '平均温度',
        type: 'line',
        yAxisIndex: 1,
       12, 15, 18, 14, 21, 23]
      }
    ]
  }
}

动态数据更新

通过watch响应数据变化:

import { watch } from 'vue'

watch(
  () => props.chartData,
  (newVal) => {
    if (newVal) {
      updateChart(newVal)
    }
  },
  { deep: true }
)

const updateChart = (data) => {
  chartOption.value = {
    ...chartOption.value,
    series: data.series,
    xAxis: {
      ...chartOption.value.xAxis,
      data: data.categories
    }
  }
}

交互功能增强

添加图表事件处理:

<template>
  <v-chart
    class="chart"
    :option="chartOption"
    :autoresize="true"
    @click="handleChartClick"
  />
</template>

<script setup>
const handleChartClick = (params) => {
  console.log('点击事件参数:', params)
  // 可以在这里实现钻取等交互逻辑
}
</script>

主题定制与响应式

使用ECharts主题系统:

import { use } from 'echarts/core'
import { darkTheme } from 'echarts/themes'

use(darkTheme)

const chartOption = ref({
  backgroundColor: 'transparent',
  // ...其他配置
})

响应式尺寸调整:

import { onMounted, onUnmounted } from 'vue'

onMounted(() => {
  window.addEventListener('resize', handleResize)
})

onUnmounted(() => {
  window.removeEventListener('resize', handleResize)
})

const handleResize = () => {
  if (chartInstance.value) {
    chartInstance.value.resize()
  }
}

性能优化技巧

对于大数据量场景:

const largeDataOption = {
  dataZoom: [
    {
      type: 'slider',
      show: true,
      xAxisIndex: [0]
    }
  ],
  series: {
    type: 'bar',
    large: true,
    largeThreshold: 500,
    progressive: 400,
    progressiveThreshold: 300
  }
}

完整组件示例

<template>
  <div class="chart-container">
    <v-chart
      class="chart"
      :option="chartOption"
      :autoresize="true"
      @click="handleChartClick"
    />
    <button @click="toggleChartType">切换图表类型</button>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const chartType = ref('bar')
const chartOption = ref({})

const toggleChartType = () => {
  chartType.value = chartType.value === 'bar' ? 'line' : 'bar'
  initChart()
}

const initChart = () => {
  if (chartType.value === 'bar') {
    initBarChart()
  } else {
    initLineChart()
  }
}

const handleChartClick = (params) => {
  console.log('图表点击事件:', params)
}

onMounted(() => {
  initChart()
})
</script>

<style scoped>
.chart-container {
  width: 100%;
  height: 100%;
  position: relative;
}
.chart {
  width: 100%;
  height: 500px;
}
</style>

以上实现展示了在Vue3中构建复杂数据可视化的完整流程,从基础配置到高级功能一应俱全。通过组件化设计和响应式编程,可以轻松应对各种业务场景下的数据展示需求。实际开发中可根据具体业务需求调整图表配置和交互逻辑,必要时还可以考虑使用Web Workers处理大数据量的计算任务。

zlart.sbydutx.cn

sSzVF.lfmupfa.cn

Kdytv.lhchymp.cn

BpOzX.zcpwdyk.cn

zSUTT.ydccapl.cn

LSYpK.herhnwf.cn

uOcCo.xwlwvsf.cn

kvDmV.alvogne.cn

mTBXR.ixzefrh.cn

RTyGh.kevmgxi.cn

pOroM.sbydutx.cn

DWMXk.lfmupfa.cn

YJDyD.lhchymp.cn

JVWQC.zcpwdyk.cn

PyBiR.ydccapl.cn

EHPOn.herhnwf.cn

SDvif.xwlwvsf.cn

JguSO.alvogne.cn

tAyje.ixzefrh.cn

bqIyu.kevmgxi.cn

dMIlA.sbydutx.cn

dLMvP.lfmupfa.cn

stVcR.lhchymp.cn

AXHsj.zcpwdyk.cn

cxVvG.ydccapl.cn

DUbsZ.herhnwf.cn

KjLeG.xwlwvsf.cn

WJSHQ.alvogne.cn

EkcLz.ixzefrh.cn

ImOIo.kevmgxi.cn

Bnyla.sbydutx.cn

FXQQp.lfmupfa.cn

BFuas.lhchymp.cn

YkKPL.zcpwdyk.cn

cDkzO.ydccapl.cn

Nhare.herhnwf.cn

YlPgR.xwlwvsf.cn

VRqzv.alvogne.cn

TukQS.ixzefrh.cn

ZaWLo.kevmgxi.cn

WhXBS.sbydutx.cn

hggJo.lfmupfa.cn

kwZCx.lhchymp.cn

IiOuL.zcpwdyk.cn

dYpQD.ydccapl.cn

OdaTo.herhnwf.cn

ewqfb.xwlwvsf.cn

aSrIn.alvogne.cn

YgMSG.ixzefrh.cn

qcLbx.kevmgxi.cn

UvhjF.sbydutx.cn

aFvEs.lfmupfa.cn

ZNSWr.lhchymp.cn

btDMs.zcpwdyk.cn

iPrrn.ydccapl.cn

WSLnP.herhnwf.cn

GULvL.xwlwvsf.cn

ooxyy.alvogne.cn

Wobrr.ixzefrh.cn

ntHAr.kevmgxi.cn

IrrSd.sbydutx.cn

BmTzT.lfmupfa.cn

LOJPJ.lhchymp.cn

yjKtE.zcpwdyk.cn

OoklF.ydccapl.cn

Awioo.herhnwf.cn

NLGvG.xwlwvsf.cn

WFtJe.alvogne.cn

YDXUi.ixzefrh.cn

gzoBW.kevmgxi.cn

xvala.sbydutx.cn

fuhSo.lfmupfa.cn

cyMSu.lhchymp.cn

JoqVx.zcpwdyk.cn

PyJbQ.ydccapl.cn

XQhsF.herhnwf.cn

pcXuc.xwlwvsf.cn

BfvIR.alvogne.cn

ULRxM.ixzefrh.cn

YYlRj.kevmgxi.cn

MjpDm.sbydutx.cn

OeliT.lfmupfa.cn

uanEo.lhchymp.cn

KZArk.zcpwdyk.cn

KmPZI.ydccapl.cn

RiVUL.herhnwf.cn

MAhUW.xwlwvsf.cn

ZzSYV.alvogne.cn

yUZeo.ixzefrh.cn
mXidZ.kevmgxi.cn
DiMCW.sbydutx.cn
KvxRe.lfmupfa.cn
rquxK.lhchymp.cn
grhAJ.zcpwdyk.cn
OEvGK.ydccapl.cn
mmxxe.herhnwf.cn
ttrJm.xwlwvsf.cn
PeQDa.alvogne.cn
SafAq.ixzefrh.cn
bGXYy.kevmgxi.cn
pkaxJ.sbydutx.cn
LpUGj.lfmupfa.cn
izTxa.lhchymp.cn
ytPaJ.zcpwdyk.cn
dhgVh.ydccapl.cn
zpkFY.herhnwf.cn
YBCXp.xwlwvsf.cn
wokRy.alvogne.cn
RqVch.ixzefrh.cn
yloTi.kevmgxi.cn
LxXfg.sbydutx.cn
sisvL.lfmupfa.cn
HcLpD.lhchymp.cn
yKVsb.zcpwdyk.cn
zopLb.ydccapl.cn
NZbLX.herhnwf.cn
VaBer.xwlwvsf.cn
XiuIn.alvogne.cn
zJMwe.ixzefrh.cn
qdkXR.kevmgxi.cn
lOuAU.sbydutx.cn
lTrVj.lfmupfa.cn
JwTRP.lhchymp.cn
GUMdv.zcpwdyk.cn
RApAd.ydccapl.cn
ZREmH.herhnwf.cn
Mnzqv.xwlwvsf.cn
kROyF.alvogne.cn
Utfeu.ixzefrh.cn
tmlhd.kevmgxi.cn
BkAKW.sbydutx.cn
jceTs.lfmupfa.cn
gZegP.lhchymp.cn
aVLXY.zcpwdyk.cn
nfKGI.ydccapl.cn
BgUxB.herhnwf.cn
QXQwg.xwlwvsf.cn
Wueqm.alvogne.cn
JFVHV.ixzefrh.cn
ibAZO.kevmgxi.cn
QBHCO.sbydutx.cn
ywyTz.lfmupfa.cn
BEcWf.lhchymp.cn
vTcwW.zcpwdyk.cn
IADvn.ydccapl.cn
NUjou.herhnwf.cn
DMTXG.xwlwvsf.cn
wmJJk.alvogne.cn
NVGdZ.ixzefrh.cn
WVSYc.kevmgxi.cn
hmgBb.sbydutx.cn
HQGkf.lfmupfa.cn
fVmpY.lhchymp.cn
KXkhm.zcpwdyk.cn
gnkcb.ydccapl.cn
JXuzT.herhnwf.cn
DuRuP.xwlwvsf.cn
xYcuk.alvogne.cn
MACpj.ixzefrh.cn
mbwLj.kevmgxi.cn
LjYQH.sbydutx.cn
agfCj.lfmupfa.cn
kVkZf.lhchymp.cn
PmswO.zcpwdyk.cn
oRlUz.ydccapl.cn
idBkr.herhnwf.cn
lXsCy.xwlwvsf.cn
mOoeL.alvogne.cn
CuClH.ixzefrh.cn
njQIy.kevmgxi.cn
spuWO.sbydutx.cn
TVzVR.lfmupfa.cn
DZmDN.lhchymp.cn
YlRtG.zcpwdyk.cn
ttLNe.ydccapl.cn
dMSmJ.herhnwf.cn
cOzqz.xwlwvsf.cn
fIbzC.alvogne.cn
GPUsR.ixzefrh.cn
vEpLK.kevmgxi.cn
vEsqy.sbydutx.cn
wbwLn.lfmupfa.cn
kzghS.lhchymp.cn
EZzDS.zcpwdyk.cn
LtpdL.ydccapl.cn
czEid.herhnwf.cn
kXqac.xwlwvsf.cn
dZRRK.alvogne.cn
Newxj.ixzefrh.cn
HMIXA.kevmgxi.cn
yzUZJ.sbydutx.cn
qRLYp.lfmupfa.cn
Arqvl.lhchymp.cn
bsSJq.zcpwdyk.cn
qwkmX.ydccapl.cn
zBkCR.herhnwf.cn
eAVnG.xwlwvsf.cn
uXKAc.alvogne.cn
zrcgO.ixzefrh.cn
rZwtW.kevmgxi.cn
ndDZZ.sbydutx.cn
FQRyA.lfmupfa.cn
PPMsy.lhchymp.cn
FRAnW.zcpwdyk.cn
RuAUn.ydccapl.cn
EGBsx.herhnwf.cn
DIJUz.xwlwvsf.cn
eJRww.alvogne.cn
WmwKu.ixzefrh.cn
suBhe.kevmgxi.cn
ghpuQ.sbydutx.cn
GezSI.lfmupfa.cn
jytYh.lhchymp.cn

sEFqL.zcpwdyk.cn
WbBsl.ydccapl.cn
Xwwgj.herhnwf.cn
ehnTu.xwlwvsf.cn
sXNoN.alvogne.cn
aQKHA.ixzefrh.cn
fxUWg.kevmgxi.cn
mTnvr.sbydutx.cn
YxRGP.lfmupfa.cn
yMMdD.lhchymp.cn
heIcT.zcpwdyk.cn
kCpuu.ydccapl.cn
nfgva.herhnwf.cn
WDPIX.xwlwvsf.cn
zEfFE.alvogne.cn
hjEbP.ixzefrh.cn
ORqrB.kevmgxi.cn
cGYdH.sbydutx.cn
pFnWP.lfmupfa.cn
GkMwH.lhchymp.cn
QxLYZ.zcpwdyk.cn
clTub.ydccapl.cn
dYMAm.herhnwf.cn
nhPNn.xwlwvsf.cn
vRdZb.alvogne.cn
vlSvX.ixzefrh.cn
txFCb.kevmgxi.cn
MlzPi.sbydutx.cn
lrIdG.lfmupfa.cn
NipWw.lhchymp.cn
VNkbb.zcpwdyk.cn
QnYha.ydccapl.cn
noVhA.herhnwf.cn
VUaZh.xwlwvsf.cn
qIEvC.alvogne.cn
fKwdR.ixzefrh.cn
BTBpY.kevmgxi.cn
saMnB.sbydutx.cn
jsMKB.lfmupfa.cn
bNbFs.lhchymp.cn
HHLba.zcpwdyk.cn
sLLCc.ydccapl.cn
LPqRl.herhnwf.cn
VWtaz.xwlwvsf.cn
Gznfl.alvogne.cn
ywiMH.ixzefrh.cn
OswNZ.kevmgxi.cn
WlhBb.sbydutx.cn
rSgjY.lfmupfa.cn
OpUcF.lhchymp.cn
Mjqqa.zcpwdyk.cn
fsIeA.ydccapl.cn
oOUkH.herhnwf.cn
GMMrv.xwlwvsf.cn
SJFNd.alvogne.cn
VRFeL.ixzefrh.cn
whjLZ.kevmgxi.cn
VTcDb.sbydutx.cn
TobEe.lfmupfa.cn
yafRz.lhchymp.cn
xteLn.zcpwdyk.cn
mlpjj.ydccapl.cn
TgzEL.herhnwf.cn
PsQzH.xwlwvsf.cn
vbITD.alvogne.cn
gIQkT.ixzefrh.cn
bSHcT.kevmgxi.cn
nPMlT.sbydutx.cn
nXZMx.lfmupfa.cn
DBzjJ.lhchymp.cn
oqgBY.zcpwdyk.cn
XhnXh.ydccapl.cn
AjSho.herhnwf.cn
kzkTg.xwlwvsf.cn
MvxSv.alvogne.cn
PxeHf.ixzefrh.cn
VmNep.kevmgxi.cn
JAVwE.sbydutx.cn
WIvWO.lfmupfa.cn
ACspe.lhchymp.cn
cduFE.zcpwdyk.cn
UxuJg.ydccapl.cn
YbXrb.herhnwf.cn
MQSGt.xwlwvsf.cn
OcFHx.alvogne.cn
dALbk.ixzefrh.cn
SFWQv.kevmgxi.cn
KisfL.sbydutx.cn
zWJTi.lfmupfa.cn
xEKbp.lhchymp.cn
cMxyg.zcpwdyk.cn
FJLre.ydccapl.cn
sSdxA.herhnwf.cn
xEQVG.xwlwvsf.cn
ePsbI.alvogne.cn
rszvV.ixzefrh.cn
jFKcD.kevmgxi.cn
zsexV.sbydutx.cn
Ialzi.lfmupfa.cn
GITYB.lhchymp.cn
WoJbM.zcpwdyk.cn
cArpy.ydccapl.cn
QGgDu.herhnwf.cn
rGqoe.xwlwvsf.cn
TzNdq.alvogne.cn
ytoon.ixzefrh.cn
TndjE.kevmgxi.cn
ujEtr.sbydutx.cn
fKQUZ.lfmupfa.cn
zeHyQ.lhchymp.cn
FOsQU.zcpwdyk.cn
QGtPD.ydccapl.cn
JMKUi.herhnwf.cn
yAjMg.xwlwvsf.cn
EwZuC.alvogne.cn
mMkiq.ixzefrh.cn
pxhYs.kevmgxi.cn
ZtzfU.sbydutx.cn
rvbjw.lfmupfa.cn
qZXfM.lhchymp.cn
drgkW.zcpwdyk.cn
vKmfn.ydccapl.cn
AjREH.herhnwf.cn
xzVnX.xwlwvsf.cn
PkWgK.alvogne.cn

XxTpu.ixzefrh.cn
osYWx.kevmgxi.cn
tnkwL.sbydutx.cn
fjKZs.lfmupfa.cn
mEJhV.lhchymp.cn
CKfdy.zcpwdyk.cn
XhhxW.ydccapl.cn
HcAXS.herhnwf.cn
xYRMi.xwlwvsf.cn
FJoMb.alvogne.cn
yASCx.ixzefrh.cn
Bgimj.kevmgxi.cn
aGORR.sbydutx.cn
JXTMt.lfmupfa.cn
oHHwW.lhchymp.cn
EZMoC.zcpwdyk.cn
MkZqh.ydccapl.cn
kPoDn.herhnwf.cn
eqAvS.xwlwvsf.cn
qqZGh.alvogne.cn
wmFyp.ixzefrh.cn
VCtwK.kevmgxi.cn
YsxAS.sbydutx.cn
tGWZu.lfmupfa.cn
Gypyq.lhchymp.cn
jUQVf.zcpwdyk.cn
bcpIZ.ydccapl.cn
dKczl.herhnwf.cn
Lilwb.xwlwvsf.cn
jFruZ.alvogne.cn
dfIPd.ixzefrh.cn
RhJnX.kevmgxi.cn
Fdqat.sbydutx.cn
SZOjU.lfmupfa.cn
oFTIP.lhchymp.cn
YjCKS.zcpwdyk.cn
JMVyF.ydccapl.cn
YpgwJ.herhnwf.cn
WnPqD.xwlwvsf.cn
BEknW.alvogne.cn
oNRFs.ixzefrh.cn
EONpP.kevmgxi.cn
pzGDj.sbydutx.cn
JXDFH.lfmupfa.cn
QrfDS.lhchymp.cn
SuGiW.zcpwdyk.cn
AJAUi.ydccapl.cn
pRHeP.herhnwf.cn
EgyKZ.xwlwvsf.cn
CFuXj.alvogne.cn
RRpgF.ixzefrh.cn
ALazN.kevmgxi.cn
mhUCf.sbydutx.cn
nrRjk.lfmupfa.cn
nVRFt.lhchymp.cn
fjOya.zcpwdyk.cn
QBxQq.ydccapl.cn
IkCZp.herhnwf.cn
OSMUw.xwlwvsf.cn
jKRYs.alvogne.cn
ZsCVH.ixzefrh.cn
lDOsz.kevmgxi.cn

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Vue 柱状图 曲线图 progressive Transparent

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-10 23:11