国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

項目中的Echarts圖表統(tǒng)計

這篇具有很好參考價值的文章主要介紹了項目中的Echarts圖表統(tǒng)計。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前情提要:本次Echarts數據可視化基于圖書管理系統(tǒng)設計

一、Echarts

Echarts是一個開源的可視化圖表庫,由百度前端技術部開發(fā)維護。它基于JavaScript語言實現,通過簡單的配置即可生成豐富多樣的圖表,包括柱狀圖、折線圖、餅圖等等。Echarts支持各種數據格式,如JSON、XML、CSV等,同時也提供了強大的交互功能,可以讓用戶在圖表上進行縮放、平移、標記等操作。Echarts還有豐富的擴展插件和主題,方便用戶根據不同需求進行自定義定制。Echarts的優(yōu)點在于使用簡單、靈活性高、可定制性強,并且提供了完善的文檔和API參考,方便開發(fā)人員快速上手和開發(fā)。

二、前端(Vue+Echarts)

Echarts下載:npm i echarts -S

HomeView.vue(完整代碼)

<template>
  <div>
    <div style="margin: 20px 0">
      <el-select class="input" v-model="timeRange" placeholder="請選擇" @change="load">
        <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
        </el-option>
      </el-select>
    </div>
    <el-card>
      <div id="line" style="width: 100%; height: 400px"></div>
    </el-card>
  </div>
</template>

<script>
import Cookies from 'js-cookie'
import request from "@/utils/request";
import * as echarts from 'echarts'

const option = {
  title: {
    text: '圖書借還統(tǒng)計'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['借書數量', '還書數量']
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: []  //從后臺動態(tài)獲取
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: '借書數量',
      type: 'line',
      stack: 'Total',
      smooth: true,
      data: []    //從后臺動態(tài)獲取
    },
    {
      name: '還書數量',
      type: 'line',
      smooth: true,
      data: []   //從后臺動態(tài)獲取
    }
  ]
}

  export default {
    data() {
      return {
        admin: Cookies.get('admin') ? JSON.parse(Cookies.get('admin')) : {},
        lineBox: null,
        timeRange: 'week',
        options: [
          {label: '最近一周', value: 'week'},
          {label: '最近一個月', value: 'month'},
          {label: '最近兩個月', value: 'month2'},
          {label: '最近三個月', value: 'month3'},
        ]
      }
    },
    mounted() {  // 等頁面元素全部初始化好才開始加載mounth()函數
      this.load()
    },
    methods: {
      load() {
        if (!this.lineBox) {
          this.lineBox = echarts.init(document.getElementById('line'))  //初始化echarts容器
        }
        //從后臺獲取數據
        request.get('/borrow/lineCharts/' + this.timeRange).then(res => {
          option.xAxis.data = res.data.date
          option.series[0].data = res.data.borrow
          option.series[1].data = res.data.retur
          this.lineBox.setOption(option)  //設置容器的屬性值,當數據重新發(fā)生變化時,一定要重新setOption()
        })
      }
    }
  }
</script>

<style>
.input {
  width: 300px;
}
</style>

1、導入echarts

import * as echarts from 'echarts'

2、原始的option代碼

option = {
  title: {
    text: 'Stacked Line'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['Email', 'Union Ads', 'Video Ads', 'Direct', 'Search Engine']
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: 'Email',
      type: 'line',
      stack: 'Total',
      data: [120, 132, 101, 134, 90, 230, 210]
    },
    {
      name: 'Union Ads',
      type: 'line',
      stack: 'Total',
      data: [220, 182, 191, 234, 290, 330, 310]
    },
    {
      name: 'Video Ads',
      type: 'line',
      stack: 'Total',
      data: [150, 232, 201, 154, 190, 330, 410]
    },
    {
      name: 'Direct',
      type: 'line',
      stack: 'Total',
      data: [320, 332, 301, 334, 390, 330, 320]
    },
    {
      name: 'Search Engine',
      type: 'line',
      stack: 'Total',
      data: [820, 932, 901, 934, 1290, 1330, 1320]
    }
  ]
};

3、修改

目錄:

text: '圖書借還統(tǒng)計

折線:

 legend: {
    data: ['借書數量', '還書數量']
  },

橫坐標:

  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: []
  },

縱坐標:

  yAxis: {
    type: 'value'
  },

series(與相應折線legend對應)

series: [
    {
      name: '借書數量',
      type: 'line',
      stack: 'Total',
      smooth: true,
      data: []
    },
    {
      name: '還書數量',
      type: 'line',
      stack: 'Total',
      smooth: true,
      data: []
    }
  ]

4、定義echart圖標對應的dom元素
html

    <el-card>
      <div id="line" style="width: 100%; height: 400px"></div>
    </el-card>

項目中的Echarts圖表統(tǒng)計項目中的Echarts圖表統(tǒng)計5、定義echarts容器
js

    data() {
      return {
        lineBox: null,
      }
    }

6、根據時間范圍加載最新的數據
html

    <div style="margin: 20px 0">
      <el-select class="input" v-model="timeRange" placeholder="請選擇" @change="load">
        <el-option
            v-for="item in options"
            :key="item.value"
            :label="item.label"
            :value="item.value">
        </el-option>
      </el-select>
    </div>

js

    mounted() {  // 等頁面元素全部初始化好才開始加載mounth()函數
      this.load()
    },
    methods: {
      load() {
        if (!this.lineBox) {
          this.lineBox = echarts.init(document.getElementById('line'))  //初始化echarts容器
        }
        //從后臺獲取數據
        request.get('/borrow/lineCharts/' + this.timeRange).then(res => {
          option.xAxis.data = res.data.date
          option.series[0].data = res.data.borrow
          option.series[1].data = res.data.retur
          this.lineBox.setOption(option)  //設置容器的屬性值,當數據重新發(fā)生變化時,一定要重新setOption()
        })
      }
    }

三、后端(SpringBoot+MyBatis)

1、請求接口
項目中的Echarts圖表統(tǒng)計2、返回前端的數據
項目中的Echarts圖表統(tǒng)計

BorrowController.java

    //timeRange:week、month、month2、month3
    @GetMapping("/lineCharts/{timeRange}")
    public Result lineCharts(@PathVariable String timeRange) {
        return Result.success(borrowService.getCountByTimeRange(timeRange));
    }

IBorrowService.java

Map<String, Object> getCountByTimeRange(String timeRange);

BorrowService.java

導入
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;

Java工具類庫Hutool 提供的方法:
DateUtil.rangeToList() 返回從開始時間到結束時間的一個時間范圍 返回類型 List < DateTime >
DateUtil.offsetDay() 計算時間的一個工具方法 返回類型 DateTime

通過自定義函數 datetimeToDateStr()DateTime類型 的 List 轉換成一個 String類型 的 List
原因是前端里 “data”:[ ]、“return”:[ ]、“borrow”:[ ] 數組存儲的是String類型的元素
項目中的Echarts圖表統(tǒng)計

    @Override
    public Map<String, Object> getCountByTimeRange(String timeRange) {
        Map<String, Object> map = new HashMap<>();
        Date today = new Date();
        List<DateTime> dateRange;
        switch (timeRange) {
            case "week":
                dateRange = DateUtil.rangeToList(DateUtil.offsetDay(today, -6), today, DateField.DAY_OF_WEEK);
                break;
            case "month":
                dateRange = DateUtil.rangeToList(DateUtil.offsetDay(today, -29), today, DateField.DAY_OF_MONTH);
                break;
            case "month2":
                dateRange = DateUtil.rangeToList(DateUtil.offsetDay(today, -59), today, DateField.DAY_OF_MONTH);
                break;
            case "month3":
                dateRange = DateUtil.rangeToList(DateUtil.offsetDay(today, -89), today, DateField.DAY_OF_MONTH);
                break;
            default:
                dateRange = new ArrayList<>();
        }
        List<String> dateStrRange = datetimeToDateStr(dateRange);
        map.put("date", dateStrRange); // x軸的時間日期數據生成完畢
        //1 borrow  2 retrun
        //getCountByTimeRange:不會統(tǒng)計數據庫沒有的日期,比如沒有2022.11.4,他不會返回 **data=2022-11-04,count=0**
        List<BorrowReturCountPO> borrowCount = borrowMapper.getCountByTimeRange(timeRange, 1);
        List<BorrowReturCountPO> returnCount = borrowMapper.getCountByTimeRange(timeRange, 2);
        map.put("borrow", countList(borrowCount, dateStrRange));
        map.put("retur", countList(returnCount, dateStrRange));
        return map;
    }

注意:
getCountByTimeRange sql語句:不會統(tǒng)計數據庫沒有的日期,比如沒有2022.11.4,他不會返回 data=2022-11-04,count=0 這個數據,所以又寫countList()函數對在統(tǒng)計數據庫時其中不存在的數據進行處理

datetimeToDateStr()函數

把 DateTime類型 的 List 轉換成一個 String類型 的 List

    private List<String> datetimeToDateStr(List<DateTime> dateTimeList) {
        List<String> list = CollUtil.newArrayList();
        if (CollUtil.isEmpty(dateTimeList)) {
            return list;
        }
        for (DateTime dateTime : dateTimeList) {
            String date = DateUtil.formatDate(dateTime);
            list.add(date);
        }
        return list;
    }

countList()函數

1、對在統(tǒng)計數據庫時其中不存在的數據進行處理
2、.map(BorrowReturCountPO::getCount) 取出對象里的count值
3、有就取出,沒有就.orElse(0)對沒匹配的數據返回 0

    private List<Integer> countList(List<BorrowReturCountPO> countPOList, List<String> dateRange) {
        List<Integer> list = CollUtil.newArrayList();
        if (CollUtil.isEmpty(countPOList)) {
            return list;
        }
        for (String date : dateRange) {
            Integer count = countPOList.stream().filter(countPO -> date.equals(countPO.getDate()))
                    .map(BorrowReturCountPO::getCount).findFirst().orElse(0);
            list.add(count);
        }
       /*    "date": [
                    "2023-06-01",
                    "2023-06-02",
                    "2023-06-03",
                    "2023-06-04",
                    "2023-06-05",
                    "2023-06-06",
                    "2023-06-07"
        ],
            "retur": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    2
        ],
            "borrow": [
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    3
        ]*/
        return list;
    }

BorrowReturCountPO(自定義類封裝)

@Data
public class BorrowReturCountPO {
    private String date;
    private Integer count;
}

BorrowMapper.java

    List<BorrowReturCountPO> getCountByTimeRange(@Param("timeRange") String timeRange, @Param("type") int type);  // 1 borrow  2 return

Borrow.xml

1、DATE_FORMAT(createtime,‘%Y-%m-%d’) :把DateTime類型的數據格式化為 yyyy-MM-dd
2、getCountByTimeRange sql語句:如果是1查 borrow表,2查 return表
3、DATE_SUB(NOW(),INTERVAL 1 WEEK) :數據庫進行時間計算的函數(對當前的時間減去一周)文章來源地址http://www.zghlxwxcb.cn/news/detail-474899.html

    <select id="getCountByTimeRange" resultType="com.example.springboot.mapper.po.BorrowReturCountPO">
        select count(id) as count, DATE_FORMAT(createtime,'%Y-%m-%d') as date from
        <if test="type == 1">
            borrow
        </if>
        <if test="type == 2">
            retur
        </if>
        where
        <choose>
            <when test="timeRange == 'week'">
                createtime >=  DATE_SUB(NOW(),INTERVAL 1 WEEK)
            </when>
            <when test="timeRange == 'month'">
                createtime >=  DATE_SUB(NOW(),INTERVAL 1 MONTH)
            </when>
            <when test="timeRange == 'month2'">
                createtime >=  DATE_SUB(NOW(),INTERVAL 2 MONTH)
            </when>
            <when test="timeRange == 'month3'">
                createtime >=  DATE_SUB(NOW(),INTERVAL 3 MONTH)
            </when>
            <otherwise>
                createtime > now()
            </otherwise>
        </choose>
        group by date
    </select>

到了這里,關于項目中的Echarts圖表統(tǒng)計的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Vue3項目中使用ECharts圖表并實現自適應效果

    Vue3項目中使用ECharts圖表并實現自適應效果

    在項目中輸入如下代碼: 安裝完成可以在package.json中看到: 創(chuàng)建ECharts圖表的文件barCharts.vue,將它引入并在父組件中使用。在使用setup時,我們把組件直接引入進來,就可以直接使用了,不用像Vue2那樣需要注冊了。 在父組件中創(chuàng)建一個有寬高的容器,里面放ECharts組件,ECh

    2024年02月03日
    瀏覽(32)
  • ECharts中: legend圖例中的格式化屬性(formatter)以及嵌套圖表

    ECharts中: legend圖例中的格式化屬性(formatter)以及嵌套圖表

    Documentation - Apache ECharts 字符串模板的相識變量使用(不同的圖表對應都有對應的變量): Documentation - Apache ECharts 具體詳細使用可以點^^^鏈接查看: 你只需要創(chuàng)建一個 div id =\\\"xjzbChart\\\"/div 然后 獲取 xjzbChart = echarts.init(document.getElementById(\\\'xjzbChart\\\')); 在 series數組里面創(chuàng)建兩個圖表對象

    2024年02月13日
    瀏覽(32)
  • uniapp+vue3+ts+vite+echarts開發(fā)圖表類小程序,將echarts導入項目使用的詳細步驟,耗時一天終于弄好了

    uniapp+vue3+ts+vite+echarts開發(fā)圖表類小程序,將echarts導入項目使用的詳細步驟,耗時一天終于弄好了

    想在uniapp和vue3環(huán)境中使用echarts是一件相當前衛(wèi)的事情,官方適配的還不是很好,echarts的使用插件寫的是有些不太清晰的,這里我花費了一天的時間,終于將這個使用步驟搞清楚了,并且建了一個倉庫,大家可以直接clone下來使用。先看一下pc端和小程序端的效果: 微信小程

    2024年02月05日
    瀏覽(227)
  • Java項目-蒼穹外賣-Day11-Apache ECharts數據統(tǒng)計

    Java項目-蒼穹外賣-Day11-Apache ECharts數據統(tǒng)計

    主要是以下四項的統(tǒng)計,以不同形式的圖形進行展示 自己去網站上看一哈,我不太懂前端 com.sky.controller.admin.ReportController com.sky.service.impl.ReportServiceImpl.java orderMapper orderMapper.xml Reportcontroller ReportServiceImpl orderMapper.xml reportController ReportServiceImpl orderMapper.xml

    2024年02月09日
    瀏覽(27)
  • web前端之若依項目窗口大小改變或側邊欄伸縮時echarts圖表自適應、封裝執(zhí)行文件和模板文件、展開、折疊、ApacheECharts、KeepAlive、RouterView、deactivated

    web前端之若依項目窗口大小改變或側邊欄伸縮時echarts圖表自適應、封裝執(zhí)行文件和模板文件、展開、折疊、ApacheECharts、KeepAlive、RouterView、deactivated

    如需完整代碼請WX私聊: MJ682517 沒有任何套路,直接發(fā)代碼 在 vue 項目中,窗口大小不變(排除window的resize監(jiān)聽),側邊菜單欄折疊展開,導致右邊內容區(qū)域寬度變化, echarts 圖表不會自適應。常規(guī)解決辦法的是使用window.addEventListener(“resize”)來監(jiān)聽窗口變化,但當前窗口大小并

    2024年02月01日
    瀏覽(23)
  • vue-echarts踩坑,本地開發(fā)可以渲染echarts圖表,線上環(huán)境圖表渲染不出來

    vue-echarts踩坑,本地開發(fā)可以渲染echarts圖表,線上環(huán)境圖表渲染不出來

    main.js 全局注冊v-chart組件 在頁面中使用 如上圖,我開始寫的靜態(tài)數據,在data中定義了chartOption1:{…配置項…}, 在接口數據返回之后,更新了配置項,在本地開發(fā)環(huán)境可以正常渲染。但是線上環(huán)境出不來,也不報錯,接口數據一切正常。 解決辦法: 無奈最后沒有使用‘vue-e

    2024年01月18日
    瀏覽(22)
  • 【ECharts系列】ECharts 圖表渲染問題&解決方案

    【ECharts系列】ECharts 圖表渲染問題&解決方案

    echats 渲染,第一次的時候只出現Y軸數值,不出現X軸數值,切換下頁面,X軸數值就能出現。 ?如果在使用ECharts渲染時,X軸數值只在切換頁面后才出現,可能是因為ECharts在初始化時沒有正確計算X軸的尺寸。 以下是可能的原因和解決方法: 數據格式不正確 沒有設置X軸的類型

    2024年02月12日
    瀏覽(26)
  • 圖表庫-Echarts

    圖表庫-Echarts

    一. Echarts 1. 概述 常見的數據可視化庫: D3.js 目前 Web 端評價最高的 Javascript 可視化工具庫(入手難) ECharts.js 百度出品的一個開源 Javascript 數據可視化庫 Highcharts.js 國外的前端數據可視化庫,非商用免費,被許多國外大公司所使用AntV 螞蟻金服全新一代數據可視化解決方案 等等

    2023年04月18日
    瀏覽(19)
  • Echarts實現3d圖表

    Echarts實現3d圖表

    注意:在使用一些3d類的echart的時候會發(fā)現報下面的錯誤 ?這個是因為echarts引用3d圖形需要引入echarts和echarts-gl (這里我們可能會遺漏掉引入echarts-gl) 要注意不同版本echarts對應不同版本echarts-gl 【如果版本不匹配就重新安裝對應版版本】

    2024年02月16日
    瀏覽(21)
  • Vue+Echarts圖表動態(tài)適配

    目錄 前言 一、問題背景 二、解決方案 1.在Vue組件中引入Echarts 2.初始化圖表 3.監(jiān)聽resize事件 4.銷毀圖表 三、優(yōu)化方案 1.防抖 2.節(jié)流 四、總結 在實際的前端開發(fā)過程中,動態(tài)適配是一個非常重要的問題。在數據可視化的場景下,圖表的動態(tài)適配尤為重要。在本篇博客中,我們

    2024年02月05日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包