数据可视化分析框架 amCharts 5

6 篇文章 0 订阅

官网文档amCharts 5 框架官网icon-default.png?t=M0H8https://www.amcharts.com/

  • 下载安装 amCharts 

npm install @amcharts/amcharts5
  • 在组件的脚本部分导入 amCharts 库

import * as am5 from '@amcharts/amcharts5';
import * as am5xy from '@amcharts/amcharts5/xy';
import am5themes_Animated from '@amcharts/amcharts5/themes/Animated';
  • amCharts 5 演示

<template>
    <div class="manufacturingStateTestData">
        <div class="mainlayout">
            <div class="goBack poi flex0" @click="goBack" style="width: 200px">
                <i class="el-icon-arrow-left b mr5"></i>订单
                <span class="g5 n"> -- 数据可视化分析 </span>
            </div>
            <div class="bgf pl30 pr30 pt20 pb20" style="margin-top: 35px">
                <div class="hikeen-handleBar">
                    <div ref="chartDiv" style="width: 100%;height: 600px"></div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    import {pmsNewOrderApi} from "@/axios/api";
    import * as am5 from '@amcharts/amcharts5';
    import * as am5xy from '@amcharts/amcharts5/xy';
    import am5themes_Animated from '@amcharts/amcharts5/themes/Animated';

    export default {
        name: "sapDataAnalysis",
        components: {},
        data() {
            return {
                tableData: [],
            };
        },
        created() {
            this.allExportExcelData()
        },
        mounted() {
            setTimeout(() => {
                this.openData(this.tableData)
            }, 100)
        },

        beforeDestroy() {
            if (this.root) {
                this.root.dispose();
            }
        },

        methods: {
            allExportExcelData() {
                this.tableData = []
                let data = [{ // 这里是从后端获取的所有数据
                    "tid": "1478348630636335105",
                    "tenantId": "1442731289412210689",
                    "state": 1,
                    "orderDate": "2021-12-01 08:00:00",
                    "orderNumber": "HK-2021120002",
                    "productNumber": "9.TS2T512CP538C59HX",
                    "productionQuantity": 970,
                    "customerOrderQuantity": 969,
                    "region": "迪拜",
                }, {
                    "tid": "1478348630724415489",
                    "tenantId": "1442731289412210689",
                    "state": 1,
                    "orderDate": "2021-12-02 08:00:00",
                    "orderNumber": "HK-2021120010-2",
                    "productNumber": "9.TS2T512CP538C59XMA",
                    "productionQuantity": 2424,
                    "customerOrderQuantity": 2424,
                    "region": "塔吉克斯坦",
                }, {
                    "tid": "1478348630770552834",
                    "tenantId": "1442731289412210689",
                    "state": 1,
                    "orderDate": "2021-12-02 08:00:00",
                    "orderNumber": "HK-2021120016-1",
                    "productNumber": "9.TRT2864P639BTSJP55",
                    "productionQuantity": 1614,
                    "customerOrderQuantity": 1610,
                    "region": "摩洛哥",
                }, {
                    "tid": "1478348630783135746",
                    "tenantId": "1442731289412210689",
                    "state": 1,
                    "orderDate": "2021-12-02 08:00:00",
                    "orderNumber": "HK-2021120016-2",
                    "productNumber": "9.TRT2864P639BTSJP55",
                    "productionQuantity": 209,
                    "customerOrderQuantity": 620,
                    "region": "摩洛哥",
                }, {
                    "tid": "1483728779334529026",
                    "tenantId": "1442731289412210689",
                    "state": 1,
                    "orderDate": "2021-12-01 08:00:00",
                    "orderNumber": "HK-TEST-ORDER001",
                    "productNumber": "9.TRT2851V09DCYMJL.2G",
                    "productionQuantity": 184,
                    "customerOrderQuantity": 660,
                    "region": "孟加拉",
                }]
                this.tableData = data
                // 下面注释是把视图需要的字段摘取出来 --- 可根据自己数据选择是否需要摘取
                /*data.forEach((item, index) => {
                    this.tableData.push({
                        orderNumber: item.orderNumber,
                        productionQuantity: item.productionQuantity,
                        customerOrderQuantity: item.customerOrderQuantity
                    })
                })*/
            },

            openData(data) {
                let root = am5.Root.new(this.$refs.chartDiv); // 使用ref或者id获取节点
                root.setThemes([am5themes_Animated.new(root)]);
                let chart = root.container.children.push(am5xy.XYChart.new(root, {
                    panY: false,
                    panX: true,
                    wheelX: "panX",
                    wheelY: "zoomX",
                    layout: root.verticalLayout
                }));
                chart.get("colors").set("step", 3);

                let scrollbarX = am5.Scrollbar.new(root, {
                    orientation: "horizontal"
                });
                chart.set("scrollbarX", scrollbarX);
                chart.bottomAxesContainer.children.push(scrollbarX);

                let cursor = chart.set("cursor", am5xy.XYCursor.new(root, {}))
                cursor.lineY.set("visible", false)

                let xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
                    categoryField: "orderNumber",
                    renderer: am5xy.AxisRendererX.new(root, {
                        minGridDistance: 35
                    })
                }));
                xAxis.events.once("datavalidated", function (ev) {
                    ev.target.zoomToIndexes(0, 9); // 这里设置页面首次加载时,要展示多少条数据
                });
                xAxis.data.setAll(data);

                let yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
                    renderer: am5xy.AxisRendererY.new(root, {})
                }));
                let paretoAxisRenderer = am5xy.AxisRendererY.new(root, {opposite: true});
                let paretoAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
                    renderer: paretoAxisRenderer,
                    min: 0,
                    max: 100,
                    strictMinMax: true
                }));
                paretoAxisRenderer.grid.template.set("forceHidden", true);
                paretoAxis.set("numberFormat", "#'%");

                function createSeries(field, name, color, dashed) {
                    let series = chart.series.push(am5xy.ColumnSeries.new(root, {
                        xAxis: xAxis,
                        yAxis: yAxis,
                        valueYField: field,
                        sequencedInterpolation: true,
                        categoryXField: "orderNumber", //字段需对应
                        tooltip: am5.Tooltip.new(root, {
                            labelText: name + ": {valueY}"
                        })
                    }));

                    series.columns.template.setAll({
                        tooltipText: "{categoryX}: {valueY}",
                        tooltipY: 0,
                        strokeOpacity: 0,
                        fillOpacity: 0.77,
                        strokeWidth: 2,
                        cornerRadiusTL: 9,
                        cornerRadiusTR: 9
                    });
                    series.columns.template.adapters.add("fill", function (fill, target) {
                        return chart.get("colors").getIndex(series.dataItems.indexOf(target.dataItem));
                    })
                    series.data.setAll(data);
                    series.appear(1000);
                    return series;
                }
                // 要展示的视图字段 - 展示线图或者柱状图 根据自己需要进行定义
                createSeries("productionQuantity", "生产数量", am5.color(0xB1B106));
                createSeries("customerOrderQuantity", "客户订单数量", am5.color(0xD68C45), true);
                chart.appear(1000, 100);

                this.root = root;
            },

            goBack() {
                window.history.back();
            },
        },

        watch: {},
    };
</script>

<style lang="scss">
    
</style>
  • 例图

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
xml <!-- [xml] (xml / csv) 数据类型xml/csv--> ; <!-- 如果使用csv作为数据的话,需要使用这个属性;表示文件数据分隔符,(平常以";"和","为主) [;] (string) csv file data separator (you need it only if you are using csv file for your data) --> 1 <!-- 如果使用的是csv数据,可以设置跳过几行再显示数据,默认为0表示csv中的数据全部显示,大于n(n>0);表示前面n行都不显示[0] (Number) if you are using csv data type, you can set the number of rows which should be skipped here --> <!-- 设置系统中的字体[Arial] (font name) use device fonts, such as Arial, Times New Roman, Tahoma, Verdana... --> <!-- 设置所有文本的大小,默认为11,具体的文本的字体大小也可以在下面的设置中设置[11] (Number) text size of all texts. Every text size can be set individually in the settings below --> <!-- 同上[#000000] (hex color code) main text color. Every text color can be set individually in the settings below--> . <!-- 小数分隔符,默认为[,]注:该属性只是用来显示,而在csv数据文件中,必须使用[.] (string) decimal separator. Note, that this is for displaying data only. Decimals in data xml file must be separated with a dot --> <!-- 千位分隔符,默认为空[ ] (string) thousand separator. use "none" if you don't want to separate --> 3 <!-- 如果百分数格式的数字,后面的小数位小于该属性的值,则在小数后面加0补充。如54.2%,该属性设置为3,那么显示的效果为54.200%。[] (Number) if your value has less digits after decimal then is set here, zeroes will be added --> <!--设置科学记数法的最小值 [0.000001] If absolute value of your number is equal or less then scientific_min, this number will be form

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值