【highCharts绘制3d饼图】有、无高低差的3d饼图

在Vue中使用highCharts绘制3d饼图的方法


参考: 在Vue中使用highCharts绘制3d饼图的方法

首先使用 npm在你的项目中安装vue-highcharts

npm install vue-highcharts --save

由于vue-highcharts依赖于highcharts,我们还需要安装后者

npm install highcharts --save

或者

yarn add  highcharts --save
yarn  add  vue-highcharts --save

安装完成后,进入项目main.js进行配置:

import highcharts from 'highcharts'
import VueHighCharts from 'vue-highcharts'

引入以上两项之后,因为我们需要使用3d图表,还需要引入:

import highcharts3d from 'highcharts/highcharts-3d'

调用3d图表:

highcharts3d(highcharts)

OK,到此为止已经在vue中配置好highcharts,接下来根据API绘制一份3d饼图

无高低差的3d饼图

新建一个饼图的组件:

<template>
<div class="container">
  <div :id="id" :option="option"></div>
</div>
</template>
<script>
import HighCharts from 'highcharts'
export default {
  props: {
    id: {
      type: String
    },
      //option 是图表的配置数据
    option: {
      type: Object
    }
  },
  mounted() {
    HighCharts.chart(this.id, this.option)
  }
}
</script>
 
<style scoped>
/* 容器 */
.container {
width: 1000px;
height: 550px;
}
</style>

在需要使用饼图的页面里配置option数据

<template>
  <div class="charts">
    <pie :id="id" :option="option"></pie>
  </div>
</div>
</template>
 
<script>
import pie from '../components/pie'
import manes from '../components/list'
export default {
  components: {
    pie,
  },
  data() {
    return {
      id: 'test',
      option: {
        chart: {
          type: 'pie',//饼图
           options3d: {
             enabled: true,//使用3d功能
             alpha: 60,//延y轴向内的倾斜角度
             beta: 0,
           }
        },
        title: {
          text: '测试用'//图表的标题文字
        },
        subtitle: {
          text: ''//副标题文字
        },
 
      plotOptions: {
        pie: {
          allowPointSelect: true,//每个扇块能否选中
          cursor: 'pointer',//鼠标指针
          depth: 35,//饼图的厚度
          dataLabels: {
            enabled: true,//是否显示饼图的线形tip
          }
        }
      },
        series: [
        {
          type: 'pie',
          name: '测试用1',//统一的前置词,非必须
          data: [
            ['测试1',12],//模块名和所占比,也可以{name: '测试1',y: 12}
            ['测试2',23],
            ['测试3',19],
            ['测试4',29]
          ]
         }
        ]
      }
    }
  },
 
}
</script>
 
<style scoped>
 
</style>

推荐用这个:有高低差的3d饼图(item.h设一样的、events里面注释掉,也能变成无高低差的3d饼图)

<div class="rc4-chart" id="rc4-chart"></div>
import { highchartsPie } from './hightChart.js'



    initRight4Chart() {
      let pieData = []
      let total = 0
      const percent = {}
      const data = [
        {
          area: '泉州',
          value: '2767.6',
        },
        {
          area: '福州',
          value: '2894.67',
        },
        {
          area: '南平',
          value: '350.28',
        },
        {
          area: '厦门',
          value: '1767.71',
        },
        {
          area: '宁德',
          value: '460.56',
        },
        {
          area: '漳州',
          value: '1306.77',
        },
        {
          area: '龙岩',
          value: '582.58',
        },
        {
          area: '莆田',
          value: '502.8',
        },
        {
          area: '三明',
          value: '488.15',
        },
      ]
      //饼图
      pieData = data.map((item, index) => {
        item.name = item.area
      	item.y = item.value - ''
        item.h = (index + 6) * 10
        return item
      })

      highchartsPie('rc4-chart', pieData, '吨')
    },
 // 新增hightChart.js
import Highcharts from 'highcharts'

export function highchartsPie(id,pieData,unit) {
    // 修改3d饼图绘制过程
  var each = Highcharts.each,
  round = Math.round,
  cos = Math.cos,
  sin = Math.sin,
  deg2rad = Math.deg2rad;
  Highcharts.wrap(Highcharts.seriesTypes.pie.prototype, 'translate', function(proceed) {
  proceed.apply(this, [].slice.call(arguments, 1));
  // Do not do this if the chart is not 3D
  if (!this.chart.is3d()) {
    return;
  }
  var series = this,
    chart = series.chart,
    options = chart.options,
    seriesOptions = series.options,
    depth = seriesOptions.depth || 0,
    options3d = options.chart.options3d,
    alpha = options3d.alpha,
    beta = options3d.beta,
    z = seriesOptions.stacking ? (seriesOptions.stack || 0) * depth : series._i * depth;
  z += depth / 2;
  if (seriesOptions.grouping !== false) {
    z = 0;
  }
  each(series.data, function(point) {
    var shapeArgs = point.shapeArgs,
      angle;
    point.shapeType = 'arc3d';
    var ran = point.options.h;
    shapeArgs.z = z;
    shapeArgs.depth = depth * 0.75 + ran;
    shapeArgs.alpha = alpha;
    shapeArgs.beta = beta;
    shapeArgs.center = series.center;
    shapeArgs.ran = ran;
    angle = (shapeArgs.end + shapeArgs.start) / 2;
    point.slicedTranslation = {
      translateX: round(cos(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad)),
      translateY: round(sin(angle) * seriesOptions.slicedOffset * cos(alpha * deg2rad))
    };
  });
  });
  (function(H) {
  H.wrap(Highcharts.SVGRenderer.prototype, 'arc3dPath', function(proceed) {
    // Run original proceed method
    var ret = proceed.apply(this, [].slice.call(arguments, 1));
    ret.zTop = (ret.zOut + 0.5) / 100;
    return ret;
  });
  }(Highcharts));

  // 生成不同高度的3d饼图
  Highcharts.chart(id, {
  chart: {
    type: 'pie',
    animation: false,
    backgroundColor: '#051723',
    events: {
      load: function() {
        var each = Highcharts.each,
          points = this.series[0].points;
        each(points, function(p, i) {
          p.graphic.attr({
            translateY: -p.shapeArgs.ran
          });
          p.graphic.side1.attr({
            translateY: -p.shapeArgs.ran
          });
          p.graphic.side2.attr({
            translateY: -p.shapeArgs.ran
          });
        });
      }
    },
    options3d: {
      enabled: true,
      alpha: 75,
      beta: 0
    }
  },
  credits:{
    enabled:false
  },
  title:{
      align:'right',
      text:'单位: t/h',
      style: { 
        fontSize: 40,
        color: '#fff',
      },
   },
  lenged:{
    align: 'left',
    verticalAlign:'top',
    x: 0,
    y: 0
  },
  tooltip: {
    pointFormat: '{point.name}: <b>{point.y}</b>',
  },
   colors: [
       '#3adcb0',
       '#FDCA2D',
       '#1384F4',
       '#ed9de8',
       '#8ae48f',
   ],
  plotOptions: {
    pie: {
      allowPointSelect: true,
       cursor: 'pointer',
       showInLegend: false,
       depth: 35,
       dataLabels: {
         distance: 60,
         enabled: true,
         formatter: function() { 
          return this.key+': <b>'+this.y+'</b><br/>'+ Highcharts.numberFormat(this .percentage,2)+'%'
         }, 
         style: { 
          fontSize: 35,
          color: '#fff',
         },
       }
    }
  },
  series: [{
    type: 'pie',
    name: '碳排放',
    data: pieData
  }]
  });
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Vue中使用Highcharts绘制3D饼图,首先需要在你的项目中安装vue-highcharts库,并在main.js中引入HighchartsHighcharts-3D模块。可以按照以下步骤进行操作: 1. 使用npm在你的项目中安装vue-highcharts库。 2. 在main.js中引入HighchartsHighcharts-3D模块: import highcharts from 'highcharts' import highcharts3d from 'highcharts/highcharts-3d' highcharts3d(highcharts) 3. 在Vue组件中使用vue-highcharts组件,并设置你的3D饼图的配置。 4. 参考上述的Vue教程来绘制3D饼图。 通过以上步骤,你就可以在Vue中使用Highcharts绘制3D饼图了。请确保你已经正确安装了依赖库并按照引用和引用提供的方法进行配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【highCharts绘制3d饼图】有、无高低3d饼图](https://blog.csdn.net/phhzhhh/article/details/125807211)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue单页面中使用 highcharts 绘制3D饼图](https://blog.csdn.net/qq_46566911/article/details/121280786)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值