Echarts連接數據庫,實時繪制圖表詳解

文章目錄

  • Echarts連接數據庫,實時繪制圖表詳解
    • 一、引言
    • 二、步驟一:環境準備與數據庫連接
      • 1、環境搭建
      • 2、數據庫連接
    • 三、步驟二:數據獲取與處理
      • 1、查詢數據庫
      • 2、數據處理
    • 四、步驟三:ECharts圖表配置與渲染
      • 1、配置ECharts選項
      • 2、動態加載數據
    • 五、其他交互功能
    • 六、總結

Echarts連接數據庫,實時繪制圖表詳解

一、引言

在現代數據可視化領域,ECharts 是一個非常流行的開源JavaScript可視化庫,它能夠流暢地運行在PC和移動設備上,并且兼容當前絕大部分瀏覽器。ECharts 提供了豐富的圖表類型和交互功能,使得數據展示變得更加直觀和生動。本文將詳細介紹如何將ECharts與數據庫連接,實現實時數據的可視化繪制。
在這里插入圖片描述

二、步驟一:環境準備與數據庫連接

1、環境搭建

在開始之前,確保你的環境中已經安裝了ECharts和數據庫(如MySQL)。你可以通過以下方式引入ECharts:

<!-- 引入ECharts文件 -->
<script src="js/echarts.js"></script>

在這里插入圖片描述

2、數據庫連接

使用Java作為后端語言,通過JDBC連接MySQL數據庫。首先,確保你的Class.forName加載了正確的數據庫驅動,我這里使用的是Springboot:

server:port: 8083
spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useSSL=falseusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driver

在這里插入圖片描述
測試數據庫連接是否成功:

public class DBTest {public static void main(String[] args) {try {Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database?useSSL=false", "root", "your_password");if (conn != null) {System.out.println("數據庫連接成功!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫連接失敗!");}}
}

在這里插入圖片描述

三、步驟二:數據獲取與處理

1、查詢數據庫

編寫SQL查詢語句,從數據庫中獲取需要展示的數據。例如,我們想要獲取最近一周的銷售數據:

在這里插入圖片描述

    <select id="educational" resultType="com.qcby.qz.entity.Echars">SELECT educational as name, count(*) AS valueFROM jobGroup BY educational</select>

2、數據處理

在Java后端,編寫代碼處理查詢結果,并將數據轉換為ECharts所需的格式。例如,將查詢結果轉換為JSON數組:

在這里插入圖片描述

@RequestMapping("/salesData")
@ResponseBody
public List<SalesData> getSalesData() {List<SalesData> salesDataList = salesService.getSalesData();// 轉換為ECharts需要的數據格式List<String> names = new ArrayList<>();List<Integer> values = new ArrayList<>();for (SalesData data : salesDataList) {names.add(data.getProductName());values.add(data.getTotalQuantity());}Map<String, Object> result = new HashMap<>();result.put("names", names);result.put("values", values);return new ArrayList<>(result.values());
}

四、步驟三:ECharts圖表配置與渲染

1、配置ECharts選項

在前端頁面,配置ECharts的選項,包括標題、工具箱、坐標軸和系列等:

在這里插入圖片描述

 option = {//  backgroundColor: '#00265f',tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},grid: {left: '0%',top: '10px',right: '0%',bottom: '4%',containLabel: true},xAxis: [{type: 'category',data: keys,axisLine: {show: true,lineStyle: {color: "rgba(255,255,255,.1)",width: 1,type: "solid"},},axisTick: {show: false,},axisLabel: {interval: 0,// rotate:50,show: true,splitNumber: 15,textStyle: {color: "rgba(255,255,255,.6)",fontSize: '12',},},}],yAxis: [{type: 'value',axisLabel: {//formatter: '{value} %'show: true,textStyle: {color: "rgba(255,255,255,.6)",fontSize: '12',},},axisTick: {show: false,},axisLine: {show: true,lineStyle: {color: "rgba(255,255,255,.1	)",width: 1,type: "solid"},},splitLine: {lineStyle: {color: "rgba(255,255,255,.1)",}}}],series: [{type: 'bar',data: values,barWidth: '35%', //柱子寬度// barGap: 1, //柱子之間間距itemStyle: {normal: {color: '#2f89cf',opacity: 1,barBorderRadius: 5,}}}]};// 使用剛指定的配置項和數據顯示圖表。myChart.setOption(option);window.addEventListener("resize", function () {myChart.resize();});

2、動態加載數據

使用AJAX從后端獲取數據,并動態更新ECharts圖表:

在這里插入圖片描述

// 發送請求獲取數據$.ajax({type: "get",url: "/echars/educational",dataType: "json",success: function (data) {// 將所有的key放在一個數組中var keys = [];var values = [];for (var i = 0; i < data.length; i++) {if (data[i].name == null || data[i].name === "") {continue;}if (data[i].value > 100) {keys.push(data[i].name);values.push(data[i].value);}}option = {//  backgroundColor: '#00265f',tooltip: {trigger: 'axis',axisPointer: {type: 'shadow'}},grid: {left: '0%',top: '10px',right: '0%',bottom: '4%',containLabel: true},xAxis: [{type: 'category',data: keys,axisLine: {show: true,lineStyle: {color: "rgba(255,255,255,.1)",width: 1,type: "solid"},},axisTick: {show: false,},axisLabel: {interval: 0,// rotate:50,show: true,splitNumber: 15,textStyle: {color: "rgba(255,255,255,.6)",fontSize: '12',},},}],yAxis: [{type: 'value',axisLabel: {//formatter: '{value} %'show: true,textStyle: {color: "rgba(255,255,255,.6)",fontSize: '12',},},axisTick: {show: false,},axisLine: {show: true,lineStyle: {color: "rgba(255,255,255,.1	)",width: 1,type: "solid"},},splitLine: {lineStyle: {color: "rgba(255,255,255,.1)",}}}],series: [{type: 'bar',data: values,barWidth: '35%', //柱子寬度// barGap: 1, //柱子之間間距itemStyle: {normal: {color: '#2f89cf',opacity: 1,barBorderRadius: 5,}}}]};// 使用剛指定的配置項和數據顯示圖表。myChart.setOption(option);window.addEventListener("resize", function () {myChart.resize();});}});

注意渲染圖表要在請求完數據以后

五、其他交互功能

在ECharts中,可以應用許多高級交互功能來增強用戶體驗和數據的可視化展示。以下是一些ECharts中常用的高級交互功能:

  1. 動畫效果(Animation)
    ECharts 提供了多種動畫效果,可以在圖表的初始化、數據更新時展現。動畫效果可以通過 animation 配置項來開啟和定制。

    option = {animation: true,animationDelay: function (idx) {return Math.random() * 200;},animationDuration: 500,animationEasing: 'elasticOut'
    };
    

    這允許開發者為圖表添加更加生動的動畫效果,提升視覺效果。

  2. 數據縮放(Data Zoom)
    數據縮放功能允許用戶在圖表中縮放查看數據,這對于展示大量數據的圖表非常有用。

    option = {dataZoom: [{type: 'slider', // 數據縮放的類型,'slider' 表示滑動條型start: 0, // 數據窗口的起始百分比end: 100 // 數據窗口的結束百分比},{type: 'inside', // 內置型數據縮放,通過鼠標滾輪放大縮小start: 0, // 數據窗口的起始百分比end: 100 // 數據窗口的結束百分比}]
    };
    

    用戶可以通過滑動條或鼠標滾輪來放大或縮小圖表,查看特定區域的數據。

  3. 數據區域選擇(Data Range)
    數據區域選擇組件允許用戶選擇數據的某個范圍進行查看。

    option = {visualMap: {type: 'continuous',min: 0,max: 100,left: 'left',top: 'bottom',text: ['高', '低'], // 文本,默認為數值文本calculable: true, // 是否顯示拖動用的手柄inRange: {color: ['lightskyblue', 'yellow', 'orangered']}}
    };
    

    用戶可以通過拖動手柄來選擇數據的特定范圍,圖表會相應地展示所選范圍的數據。

  4. 工具箱(Toolbox)
    工具箱組件提供了保存為圖片、數據視圖、動態類型切換等功能。

    option = {toolbox: {show: true,feature: {saveAsImage: { show: true, title: "保存為圖片" },dataView: { show: true, title: "數據視圖" },magicType: { show: true, title: { line: "折線圖", bar: "柱狀圖" } }}}
    };
    

    用戶可以通過工具箱進行多種交互操作,如保存圖表、查看數據、切換圖表類型等。

  5. 圖表聯動
    ECharts 支持多個圖表之間的聯動,用戶可以通過操作一個圖表來影響其他圖表。常見的場景是多個圖表展示相同數據的不同維度,通過聯動操作可以讓圖表同步變化。
    這使得用戶可以在多個圖表之間進行交互,比如在一個圖表中選擇一個數據點,其他圖表會展示與該數據點相關的信息。

  6. 實時數據更新
    ECharts 提供了 setOption 方法用于更新圖表的數據,這對于需要顯示動態實時數據的圖表非常有用。
    用戶可以設置定時器,定期從服務器獲取新數據,并使用 setOption 方法更新圖表,實現實時數據的展示。

這些高級交互功能使得ECharts不僅能夠展示靜態的數據圖表,還能夠提供動態的、交互式的用戶體驗,適用于各種復雜的數據展示和分析場景。

六、總結

通過上述步驟,我們成功地將ECharts與數據庫連接,并實現了實時數據的可視化繪制。這種方法不僅可以用于銷售數據,還可以廣泛應用于其他需要實時數據展示的場景。ECharts的靈活性和強大的功能使其成為數據可視化的優選工具。


版權聲明:本博客內容為原創,轉載請保留原文鏈接及作者信息。

參考文章

  • ECharts 教程 | 菜鳥教程
  • ECharts連接數據庫的具體實現

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63917.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63917.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63917.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB 常用操作指南(Docker 環境下)

本文詳細介紹如何在 Docker 中操作 MongoDB&#xff0c;包括如何進入命令行、進行用戶認證、查看數據庫和集合&#xff0c;以及常用的索引操作和其他高頻使用的 MongoDB 方法。小白也能輕松上手 1. 在 Docker 中進入 MongoDB 命令行 進入運行 MongoDB 容器的命令行&#xff1a;…

【Java基礎面試題038】棧和隊列在Java中的區別是什么?

回答重點 棧&#xff08;Stack&#xff09;&#xff1a;遵循后進先出&#xff08;LIFO&#xff0c;Last In&#xff0c;First Out&#xff09;原則。即&#xff0c;最后插入的元素最先被移除。主要操作包括push&#xff08;入棧&#xff09;和pop&#xff08;出棧&#xff09;…

idea2024創建JavaWeb項目以及配置Tomcat詳解

今天呢&#xff0c;博主的學習進度也是步入了JavaWeb&#xff0c;目前正在逐步楊帆旗航&#xff0c;迎接全新的狂潮海浪。 那么接下來就給大家出一期有關JavaWeb的配置教學&#xff0c;希望能對大家有所幫助&#xff0c;也特別歡迎大家指點不足之處&#xff0c;小生很樂意接受正…

由于這些關鍵原因,我總是手邊有一臺虛擬機

概括 虛擬機提供了一個安全的環境來測試有風險的設置或軟件,而不會影響您的主系統。設置和保存虛擬機非常簡單,無需更改主要設備即可方便地訪問多個操作系統。運行虛擬機可能會占用大量資源,但現代 PC 可以很好地處理它,為實驗和工作流程優化提供無限的可能性。如果您喜歡使…

【FPGA】ISE13.4操作手冊,新建工程示例

關注作者了解更多 我的其他CSDN專欄 求職面試 大學英語 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處…

python環境中阻止相關庫的自動更新

找到conda中的Python虛擬環境位置 這里以conda中的pytorch虛擬環境為例&#xff08;Python環境位置&#xff09;&#xff0c;在.conda下的envs中進入pytorch下的conda-meta路徑下 新建一個空白的pinned文檔 右鍵點擊桌面或文件資源管理器中的空白處&#xff0c;選擇“新建” …

重溫設計模式--外觀模式

文章目錄 外觀模式&#xff08;Facade Pattern&#xff09;概述定義 外觀模式UML圖作用 外觀模式的結構C 代碼示例1C代碼示例2總結 外觀模式&#xff08;Facade Pattern&#xff09;概述 定義 外觀模式是一種結構型設計模式&#xff0c;它為子系統中的一組接口提供了一個統一…

uniapp 微信小程序 頁面部分截圖實現

uniapp 微信小程序 頁面部分截圖實現 ? 原理都是將頁面元素畫成canvas 然后將canvas轉化為圖片&#xff0c;問題是我頁面里邊本來就有一個canvas&#xff0c;ucharts圖畫的canvas我無法畫出這塊。 ? 想了一晚上&#xff0c;既然canvas最后能轉化為圖片&#xff0c;那我直接…

Flutter 基礎知識總結

1、Flutter 介紹與環境安裝 為什么選擇 Dart&#xff1a; 基于 JIT 快速開發周期&#xff1a;Flutter 在開發階段采用 JIT 模式&#xff0c;避免每次改動都進行編譯&#xff0c;極大的節省了開發時間基于 AOT 發布包&#xff1a;Flutter 在發布時可以通過 AOT 生成高效的 ARM…

Jenkins 持續集成部署

Jenkins的安裝與部署 前言 當我們在實施一個項目時&#xff0c;從新代碼中獲得反饋的速度越快&#xff0c;問題越早得到解決&#xff0c;獲得反饋的一種常見方法是在新代碼之后運行測試&#xff0c;但這就導致了當代碼正在編譯并且正在運行測試時&#xff0c;開發人員無法在測…

跨站請求偽造之基本介紹

一.基本概念 1.定義 跨站請求偽造&#xff08;Cross - Site Request Forgery&#xff0c;縮寫為 CSRF&#xff09;漏洞是一種網絡安全漏洞。它是指攻擊者通過誘導用戶訪問一個惡意網站&#xff0c;利用用戶在被信任網站&#xff08;如銀行網站、社交網站等&#xff09;的登錄狀…

Pytorch | 利用BIM/I-FGSM針對CIFAR10上的ResNet分類器進行對抗攻擊

Pytorch | 利用BIM/I-FGSM針對CIFAR10上的ResNet分類器進行對抗攻擊 CIFAR數據集BIM介紹基本原理算法流程 BIM代碼實現BIM算法實現攻擊效果 代碼匯總bim.pytrain.pyadvtest.py 之前已經針對CIFAR10訓練了多種分類器&#xff1a; Pytorch | 從零構建AlexNet對CIFAR10進行分類 Py…

如何更好的進行時間管理

先想一下我們想要做的事情&#xff0c;然后拿出Excel表格將這些事情記錄下來&#xff0c;我們把它叫做任務對這些任務按照重要性&#xff0c;緊急程度進行排序&#xff0c;拿出表格中的前六個任務&#xff0c;就是今天要做的任務新建另一張excel表格&#xff0c;表格的一列為時…

OpenGL —— 2.6.1、繪制一個正方體并貼圖渲染顏色(附源碼,glfw+glad)

源碼效果 C++源碼 紋理圖片 需下載stb_image.h這個解碼圖片的庫,該庫只有一個頭文件。 具體代碼: vertexShader.glsl #version

ubuntu開機進入initramfs狀態

虛擬機卡死成功起后進入了initramfs狀態&#xff0c;可能是跟文件系統有問題或者檢索不到根文件系統&#xff0c;或者是配置錯誤&#xff0c;系統磁盤等硬件問題導致 開機后進入如下圖的界面&#xff0c; 文中有一條提示 要手動fsck 命令修復 /dev/sda1 命令如下 fsck /de…

java根據Word模板實現動態填充導出

最近項目中需要導出Word&#xff0c;根據不同的信息導出不同的內容&#xff0c;包含文本、列表、圖片等&#xff0c;本文使用poi-tl實現在次做以記錄。 添加依賴 <!-- word導出 --> <dependency><groupId>com.deepoove</groupId><artifactId>po…

mindie推理大語言模型問題及解決方法匯總

問題說明 使用功能mindie 1.0 RC2推理大語言模型&#xff0c;遇到不少問題&#xff0c;記錄下解決思路。 我的硬件是910B4。 問題及解決 問題1 在docker內啟動mindie時終端報錯 Fatal Python error: PyThreadState_Get: the function must be called with the GIL held, …

Selenium 全面指南

Selenium 是一個強大的 Web 自動化工具&#xff0c;支持多種瀏覽器和語言綁定。 1. Selenium 的基本概念 WebDriver&#xff1a;Selenium 提供的核心接口&#xff0c;用于控制瀏覽器操作。顯式等待&#xff1a;等待特定條件滿足后再執行操作。隱式等待&#xff1a;全局設置一個…

Go框架比較:goframe、beego、iris和gin

由于工作需要&#xff0c;這些年來也接觸了不少的開發框架&#xff0c;Golang的開發框架比較多&#xff0c;不過基本都是Web"框架"為主。這里稍微打了個引號&#xff0c;因為大部分"框架"從設計和功能定位上來講&#xff0c;充其量都只能算是一個組件&…

【華為OD-E卷-木板 100分(python、java、c++、js、c)】

【華為OD-E卷-木板 100分&#xff08;python、java、c、js、c&#xff09;】 題目 小明有 n 塊木板&#xff0c;第 i ( 1 ≤ i ≤ n ) 塊木板長度為 ai。 小明買了一塊長度為 m 的木料&#xff0c;這塊木料可以切割成任意塊&#xff0c;拼接到已有的木板上&#xff0c;用來加…