• G2plot图表在Vue中使用-获取新数据后二次渲染图表-案例


    效果

    示例代码-api介绍

    1. import { Line } from '@antv/g2plot';
    2. function getData() {
    3. // generate an array of random data
    4. const data = [];
    5. const time = new Date().getTime();
    6. for (let i = -19; i <= 0; i += 1) {
    7. data.push({
    8. x: time + i * 1000,
    9. y: Math.random() + 0.2,
    10. });
    11. }
    12. return data;
    13. }
    14. const line = new Line('container', {
    15. data: getData(),
    16. padding: 'auto',
    17. xField: 'x',
    18. yField: 'y',
    19. xAxis: {
    20. type: 'time',
    21. mask: 'HH:MM:ss',
    22. },
    23. smooth: true,
    24. point: {},
    25. });
    26. line.render();
    27. setInterval(() => {
    28. const x = new Date().getTime(), // current time
    29. y = Math.random() + 0.2;
    30. const newData = line.options.data.slice(1).concat({ x, y });
    31. line.changeData(newData);
    32. }, 1000);

    Vue组件方式

    组件

    1. <template>
    2. <div id="Histogram" ref="Histogram" :style="getHeight()"></div>
    3. </template>
    4. <script>
    5. import { Column } from '@antv/g2plot'
    6. let chartChange
    7. export default {
    8. props: {
    9. value: {
    10. type: Array,
    11. default() {
    12. return []
    13. },
    14. },
    15. Height: {
    16. type: Number,
    17. default: 0,
    18. },
    19. },
    20. data() {
    21. return {
    22. radarPlot: null,
    23. }
    24. },
    25. // 监听
    26. watch: {
    27. value: {
    28. handler(newVal, oldVal) {
    29. console.log(newVal)
    30. // 方式一 有新数据从新渲染图表
    31. chartChange.changeData(newVal)
    32. // 方式二 先销毁图表 在创建图表
    33. // chartChange.destroy()
    34. // this.initRadarPlot()
    35. },
    36. deep: true, //深度监听
    37. // immediate: true,
    38. },
    39. },
    40. mounted() {
    41. this.initRadarPlot()
    42. },
    43. methods: {
    44. initRadarPlot() {
    45. // 使用ref的方式组件可以多次使用
    46. // const chartChange = new Column(this.$refs.Histogram, {
    47. chartChange = new Column(this.$refs.Histogram, {
    48. data: this.value,
    49. height: this.Height,
    50. xField: 'label',
    51. yField: 'amount',
    52. label: {
    53. // 可手动配置 label 数据标签位置
    54. position: 'top', // 'top', 'middle', 'bottom'
    55. // 可配置附加的布局方法
    56. layout: [
    57. // 柱形图数据标签位置自动调整
    58. { type: 'interval-adjust-position' },
    59. // 数据标签防遮挡
    60. { type: 'interval-hide-overlap' },
    61. // 数据标签文颜色自动调整
    62. { type: 'adjust-color' },
    63. ],
    64. content: (originData) => {
    65. return originData.amount + '%'
    66. },
    67. style: {
    68. fill: '#000',
    69. },
    70. },
    71. tooltip: {
    72. formatter: (originData) => {
    73. return { name: '占比', value: originData.amount + '%' }
    74. },
    75. },
    76. xAxis: {
    77. // title: {
    78. // //title:null 不显示title
    79. // style: {
    80. // fontSize: 14,
    81. // fill: 'red', // 文本颜色
    82. // },
    83. // },
    84. label: {
    85. // style: {
    86. // fill: 'green',
    87. // },
    88. autoHide: true,
    89. autoRotate: false,
    90. },
    91. },
    92. yAxis: {
    93. min: 0,
    94. // max: 20,
    95. // title: {
    96. // //title:null 不显示title
    97. // style: {
    98. // fontSize: 14,
    99. // fill: 'red', // 文本颜色
    100. // },
    101. // },
    102. label: {
    103. // formatter: (originData) => `${originData}%`,
    104. // style: {
    105. // fill: 'green',
    106. // },
    107. autoHide: true,
    108. autoRotate: false,
    109. },
    110. // line: {
    111. // style: {
    112. // stroke: 'red',
    113. // },
    114. // },
    115. },
    116. meta: {
    117. label: {
    118. alias: '销售额趋势',
    119. },
    120. amount: {
    121. alias: '占比',
    122. },
    123. },
    124. // legend: {
    125. // // layout: 'horizontal',
    126. // position: 'right',
    127. // },
    128. })
    129. chartChange.render()
    130. },
    131. // 图表高度
    132. getHeight() {
    133. let height = parseInt(this.Height)
    134. return { height: height + 'px' }
    135. },
    136. },
    137. }
    138. </script>
    139. <style>
    140. </style>

    不要将chart实例化在初始化方法里,将这个实例保存下来

    重载方法不要去new Chart

    使用

    1. <template>
    2. <Histogram :value="HistogramData" :Height="350" />
    3. </template>
    4. <script>
    5. import { Histogram } from '@/components'
    6. export default {
    7. name: 'WorkBench',
    8. components: {Histogram},
    9. data() {
    10. return {
    11. HistogramData: [
    12. [
    13. {
    14. label: '2022-06',
    15. amount: 17,
    16. },
    17. {
    18. label: '2022-05',
    19. amount: 12,
    20. },
    21. {
    22. label: '2022-04',
    23. amount: 40,
    24. },
    25. {
    26. label: '2022-03',
    27. amount: 1,
    28. },
    29. {
    30. label: '2022-02',
    31. amount: 10,
    32. },
    33. ],
    34. ],
    35. }
    36. }
    37. }
    38. </script>

  • 相关阅读:
    Sql server语句练习
    云原生消息流系统 Apache RocketMQ 在腾讯云的大规模生产实践
    gitee.com[0: xxx.xx.xxx.xx]: errno=Unknown error
    【Spark】Pyspark RDD
    代码签名证书如何申请
    Git 常用命令
    gcd区间 (ST表)(爱思创算法四)
    ESP32(VSCode+PlatformIO)开发环境搭建教程(2024版)
    如何获取l2行情接口?
    Linux的资源和限制
  • 原文地址:https://blog.csdn.net/JackieDYH/article/details/125407752