如何使用vue实现下图效果,y轴的泊位D1-D7是有很多个缆桩(编号从1-15),需要根据每个item的起始缆桩来绘制每个item的高度,最主要是每个item不能重叠,求解决方案

echarts绘制图表
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
27条回答 默认 最新
关注
获得0.30元问题酬金 以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。
为了创建一个能够满足您需求的VUE项目,我们可以首先设置VUE应用,并且使用ECHART库进行数据可视化。接下来,我们将使用VUE组件和VUE插件来实现所需的绘图功能。
步骤 1: 安装并初始化VUE
首先,确保您的计算机上安装了NODE.JS环境。然后,通过NPM或YARN安装VUE:
NPM INSTALL -G @VUE/CLI
在命令行中运行以下命令以初始化VUE项目:
VUE INIT VUE-CHARTJS-EXAMPLE
步骤 2: 创建VUE实例
创建一个名为
APP.VUE
的VUE实例文件,并引入ECHART库:IMPORT VUE FROM 'VUE' IMPORT { CHART AS CHARTJS } FROM 'CHART.JS' CHARTJS.REGISTER(...) EXPORT DEFAULT NEW VUE({ EL: '#APP', DATA() { RETURN { CHARTDATA: {}, LABELS: [], ITEMS: [] } }, MOUNTED() { // 数据处理逻辑... } })
步骤 3: 使用ECHART库绘制图表
现在,我们已经完成了基础的VUE应用程序,可以开始使用ECHART库进行数据可视化。我们将使用ECHART库中的
BARAXIS
组件来绘制图表。这将允许我们自定义Y轴上的泊位值。<TEMPLATE> <DIV ID="APP"> <BAR :DATA="CHARTDATA" :LABELS="LABELS" :ITEMS="ITEMS"></BAR> </DIV> </TEMPLATE> <SCRIPT> IMPORT BARAXIS FROM 'VUE-CHARTJS/BAR' EXPORT DEFAULT { NAME: 'MYCHART', COMPONENTS: { BARAXIS, }, PROPS: ['OPTIONS'], METHODS: { UPDATEOPTIONS(DATA) { THIS.CHARTDATA = DATA }, }, } </SCRIPT>
步骤 4: 添加泊位值到Y轴
为了让图表按照特定顺序显示,我们需要为每个ITEM添加泊位值。例如,如果我们希望每个ITEM都与前一个ITEM在同一水平线上,则可以通过更新
UPDATEOPTIONS
方法中的泊位值参数来实现这一点。<TEMPLATE> <DIV ID="APP"> <BAR :DATA="CHARTDATA" :LABELS="LABELS" :ITEMS="ITEMS"></BAR> </DIV> </TEMPLATE> <SCRIPT> IMPORT BARAXIS FROM 'VUE-CHARTJS/BAR' EXPORT DEFAULT { NAME: 'MYCHART', COMPONENTS: { BARAXIS, }, PROPS: ['OPTIONS'], METHODS: { UPDATEOPTIONS(DATA) { LET PREVITEMINDEX = NULL LET CURRENTINDEX = 0 FOR (LET ITEM OF DATA.ITEMS) { IF (PREVITEMINDEX !== NULL && ITEM.INDEX === PREVITEMINDEX) CONTINUE PREVITEMINDEX = CURRENTINDEX CURRENTINDEX++ THIS.CHARTDATA[ITEM.INDEX] = ITEM.HEIGHT } }, }, } </SCRIPT>
步骤 5: 自定义泊位值
如果需要调整泊位值的具体位置,您可以修改
UPDATEOPTIONS
方法中的泊位值参数。例如,如果您想要每个ITEM的泊位值位于Y轴的底部,可以将其设置为NULL
。<TEMPLATE> <DIV ID="APP"> <BAR :DATA="CHARTDATA" :LABELS="LABELS" :ITEMS="ITEMS"></BAR> </DIV> </TEMPLATE> <SCRIPT> IMPORT BARAXIS FROM 'VUE-CHARTJS/BAR' EXPORT DEFAULT { NAME: 'MYCHART', COMPONENTS: { BARAXIS, }, PROPS: ['OPTIONS'], METHODS: { UPDATEOPTIONS(DATA) { LET PREVITEMINDEX = NULL LET CURRENTINDEX = 0 FOR (LET ITEM OF DATA.ITEMS) { IF (PREVITEMINDEX !== NULL && ITEM.INDEX === PREVITEMINDEX) CONTINUE PREVITEMINDEX = CURRENTINDEX CURRENTINDEX++ THIS.CHARTDATA[ITEM.INDEX] = ITEM.HEIGHT } }, }, COMPUTED: { OPTIONS() { CONST DATA = [...THIS.CHARTDATA.VALUES()] CONST LASTHEIGHT = DATA[DATA.LENGTH - 1] CONST OFFSET = THIS.OPTIONS.OFFSET || 15 CONST HEIGHTPERITEM = THIS.OPTIONS.HEIGHTPERITEM || 10 CONST BOTTOMOFFSET = OFFSET + HEIGHTPERITEM * (DATA.LENGTH - 1) LET TOTALITEMS = 0 FOR (CONST ITEM OF DATA) { TOTALITEMS += ITEM.HEIGHT CONST HEIGHT = MATH.ROUND(TOTALITEMS / HEIGHTPERITEM) * HEIGHTPERITEM CONST INDEX = MATH.FLOOR(ITEM.INDEX / HEIGHTPERITEM) IF (INDEX > 15) BREAK CONST LABEL = `${ITEM.LABEL} (${INDEX})` CONST LABELPOSITION = `LEFT ${LABELWIDTH}PX` CONST HEIGHTLABELPOSITION = `TOP ${HEIGHTLABELWIDTH}PX` CONST WIDTHLABELPOSITION = `RIGHT ${WIDTHLABELWIDTH}PX` // 根据当前高度计算泊位值 CONST CURRENTLABELPOSITION = `BOTTOM ${LABELPOSITION + BOTTOMOFFSET}PX` CONST CURRENTHEIGHTLABELPOSITION = `BOTTOM ${HEIGHTLABELPOSITION + BOTTOMOFFSET}PX` // 更新泊位值 THIS.CHARTDATA[`${LABEL}-${INDEX}`] = ITEM.HEIGHT + OFFSET THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-WIDTH-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-LABEL-WIDTH-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-LABEL-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-LABEL-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` // 更新泊位标签 THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-WIDTH-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` // 更新泊位值 THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}-LABEL-WIDTH-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}-LABEL-LABEL-${INDEX}`] = `${LABEL} (${INDEX})` THIS.CHARTDATA[`${LABEL}-${INDEX}-LABEL-${INDEX}-LABEL-${INDEX}-LABEL-LABEL-HEIGHT-${INDEX}`] = `${LABEL} (${INDEX})` } // 绘制图表 CONST CHART = NEW CHART(THIS.$REFS.CHARTDIV, { TYPE: 'BAR', DATA: { LABELS: THIS.LABELS, DATASETS: [{ BACKGROUNDCOLOR: ['#FF69B4', '#36A3E8', '#2261A0', '#3498DB', '#CDDC39', '#F4A460', '#FED9B8', '#FFCE56', '#CCCDDE', '#6670CB', '#66A1A0', '#66A3E8', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#66B2D2', '#
解决 无用评论 打赏 举报