每天都是超级饿饿饿 2024-10-12 11:53 采纳率: 0%
浏览 11
已结题

echarts绘制图表

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

img

  • 写回答

27条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-10-12 11:54
    关注
    获得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', '#
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月20日
  • 创建了问题 10月12日