当前位置:首页 > VUE

vue实现散点图源码

2026-01-16 22:55:11VUE

以下是一个基于 Vue 和 ECharts 实现散点图的完整源码示例,分为组件封装和基础使用两部分:

安装依赖

确保项目中已安装 ECharts 和 Vue-ECharts:

npm install echarts vue-echarts

封装可复用的散点图组件

创建 ScatterChart.vue 文件:

vue实现散点图源码

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

<script>
import { use } from "echarts/core";
import { ScatterChart } from "echarts/charts";
import {
  GridComponent,
  TooltipComponent,
  LegendComponent,
  TitleComponent
} from "echarts/components";
import { CanvasRenderer } from "echarts/renderers";
import VChart from "vue-echarts";

use([
  ScatterChart,
  GridComponent,
  TooltipComponent,
  LegendComponent,
  TitleComponent,
  CanvasRenderer
]);

export default {
  components: { VChart },
  props: {
    chartData: {
      type: Array,
      default: () => [
        [10, 20],
        [15, 30],
        [20, 25]
      ]
    },
    xAxisName: {
      type: String,
      default: "X轴"
    },
    yAxisName: {
      type: String,
      default: "Y轴"
    }
  },
  computed: {
    option() {
      return {
        title: {
          text: "散点图示例"
        },
        tooltip: {
          trigger: "axis",
          axisPointer: {
            type: "cross"
          }
        },
        xAxis: {
          name: this.xAxisName,
          type: "value"
        },
        yAxis: {
          name: this.yAxisName,
          type: "value"
        },
        series: [
          {
            type: "scatter",
            symbolSize: 10,
            data: this.chartData,
            itemStyle: {
              color: "#5470c6"
            }
          }
        ]
      };
    }
  }
};
</script>

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

在父组件中使用

示例父组件 App.vue

<template>
  <div id="app">
    <scatter-chart
      :chart-data="dataPoints"
      x-axis-name="商品价格"
      y-axis-name="销量"
    />
  </div>
</template>

<script>
import ScatterChart from "./components/ScatterChart.vue";

export default {
  components: { ScatterChart },
  data() {
    return {
      dataPoints: [
        [12.5, 156],
        [24.8, 98],
        [18.6, 120],
        [30.2, 65],
        [15.3, 145]
      ]
    };
  }
};
</script>

动态更新数据示例

可通过方法更新数据:

vue实现散点图源码

methods: {
  updateData() {
    this.dataPoints = [
      [Math.random() * 30, Math.random() * 200],
      [Math.random() * 30, Math.random() * 200],
      [Math.random() * 30, Math.random() * 200]
    ];
  }
}

自定义配置项

支持通过 props 传递完整配置:

props: {
  customOption: {
    type: Object,
    default: null
  }
},
computed: {
  option() {
    return this.customOption || {
      // 默认配置
    };
  }
}

响应式设计

组件内置了 autoresize 属性,当容器尺寸变化时会自动调整图表大小。如需手动控制,可调用:

this.$refs.chart.resize();

该实现包含完整的类型定义、响应式设计和配置灵活性,可直接集成到 Vue 2/3 项目中。

标签: 源码vue
分享给朋友:

相关文章

vue设计与实现 书

vue设计与实现 书

vue设计与实现 书 《Vue.js设计与实现》是一本深入探讨Vue.js框架内部原理和设计思想的书籍,适合希望深入理解Vue.js的开发者。以下是关于这本书的详细信息: 书籍内容 《Vue…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现切换

vue实现切换

Vue 实现切换功能的方法 在 Vue 中实现切换功能可以通过多种方式实现,以下是一些常见的方法: 使用 v-if 和 v-else 指令 通过条件渲染实现切换功能,适用于简单的显示/隐藏场景。…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue实现验证

vue实现验证

Vue 表单验证实现方法 在Vue中实现表单验证可以通过多种方式完成,以下是常见的几种方法: 使用Vuelidate库 Vuelidate是一个轻量级的Vue表单验证库,安装后可以通过简单的配置实现…