国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

使用D3.js構建實時圖形的示例代碼

來源:懂視網 責編:小采 時間:2020-11-27 22:09:08
文檔

使用D3.js構建實時圖形的示例代碼

使用D3.js構建實時圖形的示例代碼:首先你需要在計算機上安裝Node和npm。 數據的可視化表示是傳遞復雜信息的最有效手段之一,D3.js提供了創建這些數據可視化的強大工具和靈活性。 D3.js是一個JavaScript庫,用于使用SVG,HTML和CSS在Web瀏覽器中生成動態的交互式數據可視化。 D3 提供了各種
推薦度:
導讀使用D3.js構建實時圖形的示例代碼:首先你需要在計算機上安裝Node和npm。 數據的可視化表示是傳遞復雜信息的最有效手段之一,D3.js提供了創建這些數據可視化的強大工具和靈活性。 D3.js是一個JavaScript庫,用于使用SVG,HTML和CSS在Web瀏覽器中生成動態的交互式數據可視化。 D3 提供了各種

首先你需要在計算機上安裝Node和npm。

數據的可視化表示是傳遞復雜信息的最有效手段之一,D3.js提供了創建這些數據可視化的強大工具和靈活性。

D3.js是一個JavaScript庫,用于使用SVG,HTML和CSS在Web瀏覽器中生成動態的交互式數據可視化。

D3 提供了各種簡單易用的函數,大大簡化了 JavaScript 操作數據的難度。由于它本質上是 JavaScript ,所以用 JavaScript 也是可以實現所有功能的,但它能大大減小你的工作量,尤其是在數據可視化方面,D3 已經將生成可視化的復雜步驟精簡到了幾個簡單的函數,你只需要輸入幾個簡單的數據,就能夠轉換為各種絢麗的圖形。有過 JavaScript 基礎的朋友一定很容易理解它。

在本教程中,我們將探討如何使用D3.js和Pusher Channels構建實時圖形。如果您在閱讀本教程時想要使用代碼,請查看此GitHub存儲庫,其中包含代碼的最終版本。

準備

要完成本教程,您需要安裝Node.js和npm。我在創建本教程時使用的版本如下:

  • Node.js v10.4.1
  • npm v6.3.0
  • 您還需要在計算機上安裝http-server。它可以通過運行以下命令通過npm安裝:npm install http-server。

    雖然不需要Pusher知識,但如果熟悉它后,對學習JavaScript和D3.js會很有幫助。

    開始

    首先,為我們要構建的應用程序創建一個新目錄。將其稱為實時圖形或任何您喜歡的圖形。在新創建的目錄中,創建一個新的index.html文件并粘貼以下代碼:

    //index.html
    
     <!DOCTYPE html>
     <hml lang="en">
     <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     <link rel="stylesheet" href="style.css" rel="external nofollow" >
     <title>Realtime D3 Chart</title>
     </head>
     <body>
    
     <script src="https://js.pusher.com/4.2/pusher.min.js"></script>
     <script src="https://d3js.org/d3.v5.min.js"></script>
     <script src="app.js"></script>
     </body>
     </html>

    如您所見,HTML文件只是提取構建圖形所需的樣式和腳本。我們正在利用D3.js來構建圖表,并使用Pusher來添加實時功能。app.js文件是應用程序前端代碼的寫入位置。

    在我們開始實現圖表之前,讓我們在style.css中添加應用程序的樣式:

     // style.css
    
     html {
     height: 100%;
     box-sizing: border-box;
     padding: 0;
     margin: 0;
     }
    
     *, *::before, *::after {
     box-sizing: inherit;
     }
    
     body {
     height: 100%;
     font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
     overflow: hidden;
     background: linear-gradient(135deg, #ffffff 0%,#e8f1f5 100%);
     }
    
     .container {
     position: absolute;
     padding: 20px;
     top: 50%;
     left: 50%;
     background-color: white;
     border-radius: 4px;
     transform: translate(-50%, -50%);
     box-shadow: 0px 50px 100px 0px rgba(0,0,102,0.1);
     text-align: center;
     }
    
     .container h1 {
     color: #333;
     }
    
     .bar {
     fill: #6875ff;
     border-radius: 2px;
     }
    
     .bar:hover {
     fill: #1edede;
     }
    
     .tooltip {
     opacity: 0;
     background-color: rgb(170, 204, 247);
     padding: 5px;
     border-radius: 4px;
     transition: opacity 0.2s ease;
     }

    安裝服務器依賴項

    假設您安裝了Node和npm,請運行以下命令來安裝應用程序的服務器組件所需的所有依賴項:

    npm install express dotenv cors pusher

    Pusher 設置

    前往Pusher網站并注冊一個免費帳戶。選擇側欄上的Channels apps,然后點擊Create Channels app以創建新應用。

    創建應用程序后,從API Keys選項卡中檢索憑據,然后在項目目錄根目錄中創建一個variables.env文件,將以下內容添加到這個文件中。

    // variables.env
    
     PUSHER_APP_ID=<your app id>
     PUSHER_APP_KEY=<your app key>
     PUSHER_APP_SECRET=<your app secret>
     PUSHER_APP_CLUSTER=<your app cluster>

    設置服務器

    現在我們已經安裝了相關的依賴項并且已經設置了我們的Pusher帳戶,我們可以開始構建服務器。

    在項目目錄的根目錄中創建一個名為server.js的新文件,并粘貼以下代碼:

    // server.js
    
     require('dotenv').config({ path: 'variables.env' });
     const express = require('express');
     const cors = require('cors');
    
     const poll = [
     {
     name: 'Chelsea',
     votes: 100,
     },
     {
     name: 'Arsenal',
     votes: 70,
     },
     {
     name: 'Liverpool',
     votes: 250,
     },
     {
     name: 'Manchester City',
     votes: 689,
     },
     {
     name: 'Manchester United',
     votes: 150,
     },
     ];
    
     const app = express();
     app.use(cors());
    
     app.get('/poll', (req, res) => {
     res.json(poll);
     });
    
     app.set('port', process.env.PORT || 4000);
     const server = app.listen(app.get('port'), () => {
     console.log(Express running → PORT ${server.address().port});
     });

    保存文件并從項目目錄的根目錄運行節點server.js以啟動服務器。

    設置前端應用程序

    應用程序的前端將寫在我們之前引用的app.js文件中。在項目目錄的根目錄中創建此文件,并在其中粘貼以下代碼:

    // app.js
    
     // set the dimensions and margins of the graph
     const margin = { top: 20, right: 20, bottom: 30, left: 40 };
     const width = 960 - margin.left - margin.right;
     const height = 500 - margin.top - margin.bottom;
    
     // set the ranges for the graph
     const x = d3
     .scaleBand()
     .range([0, width])
     .padding(0.1);
    
     const y = d3.scaleLinear().range([height, 0]);
    
     // append the container for the graph to the page
     const container = d3
     .select('body')
     .append('div')
     .attr('class', 'container');
    
     container.append('h1').text('Who will win the 2018/19 Premier League Season?');
    
     // append the svg object to the body of the page
     // append a 'group' element to 'svg'
     // moves the 'group' element to the top left margin
     const svg = container
     .append('svg')
     .attr('width', width + margin.left + margin.right)
     .attr('height', height + margin.top + margin.bottom)
     .append('g')
     .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
    
     // Create a skeleton structure for a tooltip and append it to the page
     const tip = d3
     .select('body')
     .append('div')
     .attr('class', 'tooltip');
    
     // Get the poll data from the /poll endpoint
     fetch('http://localhost:4000/poll')
     .then(response => response.json())
     .then(poll => {
     // add the x Axis
     svg
     .append('g')
     .attr('transform', 'translate(0,' + height + ')')
     .attr('class', 'x-axis')
     .call(d3.axisBottom(x));
    
     // add the y Axis
     svg
     .append('g')
     .attr('class', 'y-axis')
     .call(d3.axisLeft(y));
    
     update(poll);
     });
    
     function update(poll) {
     // Scale the range of the data in the x axis
     x.domain(
     poll.map(d => {
     return d.name;
     })
     );
    
     // Scale the range of the data in the y axis
     y.domain([
     0,
     d3.max(poll, d => {
     return d.votes + 200;
     }),
     ]);
    
     // Select all bars on the graph, take them out, and exit the previous data set.
     // Enter the new data and append the rectangles for each object in the poll array
     svg
     .selectAll('.bar')
     .remove()
     .exit()
     .data(poll)
     .enter()
     .append('rect')
     .attr('class', 'bar')
     .attr('x', d => {
     return x(d.name);
     })
     .attr('width', x.bandwidth())
     .attr('y', d => {
     return y(d.votes);
     })
     .attr('height', d => {
     return height - y(d.votes);
     })
     .on('mousemove', d => {
     tip
     .style('position', 'absolute')
     .style('left', ${d3.event.pageX + 10}px)
     .style('top', ${d3.event.pageY + 20}px)
     .style('display', 'inline-block')
     .style('opacity', '0.9')
     .html(
     <div><strong>${d.name}</strong></div> <span>${d.votes} votes</span>
     );
     })
     .on('mouseout', () => tip.style('display', 'none'));
    
     // update the x-axis
     svg.select('.x-axis').call(d3.axisBottom(x));
    
     // update the y-axis
     svg.select('.y-axis').call(d3.axisLeft(y));
     }

    在上面的代碼塊中,我們使用通過/ poll端點接收的初始數據創建了一個基本條形圖。如果您熟悉D3的工作原理,那么您應該熟悉這些代碼。我在代碼的關鍵部分添加了注釋,以指導您構建圖表的方式。

    在新終端中,啟動開發服務器以提供index.html文件:

    npx http-server

    我在這里使用http-server,但你可以使用你想要的任何服務器。您甚至可以直接在瀏覽器中打開index.html。

    此時,您的圖表應如下所示:

    使用Pusher實時更新圖表

    讓我們確保輪詢的更新可以通過Pusher Channels實時反映在應用程序的前端中。將以下代碼粘貼到app.js文件的末尾。

     // app.js
    
     const pusher = new Pusher('<your app key>', {
     cluster: '<your app cluster>',
     encrypted: true,
     });
    
     const channel = pusher.subscribe('poll-channel');
     channel.bind('update-poll', data => {
     update(data.poll);
     });

    在這里,我們打開了與Channels的連接,并使用Pusher的subscribe()方法訂閱了一個名為poll-channel的新頻道。通過bind方法監聽輪詢更新,并在收到更新后使用最新數據調用update()函數,以便重新呈現圖形。

    不要忘記使用Pusher帳戶信息中心中的相應詳細信息替換占位符。

    從服務器觸發更新

    我們將模擬每秒更新一次的輪詢,并在數據發生變化時使用Pusher觸發更新,以便輪詢的訂閱者(客戶端)可以實時接收更新的數據。

    在其他導入下面的server.js頂部添加以下代碼:

     const Pusher = require('pusher');
    
     const pusher = new Pusher({
     appId: process.env.PUSHER_APP_ID,
     key: process.env.PUSHER_APP_KEY,
     secret: process.env.PUSHER_APP_SECRET,
     cluster: process.env.PUSHER_APP_CLUSTER,
     encrypted: true,
     });
    
     function getRandomNumber(min, max) {
     return Math.floor(Math.random() * (max - min) + min);
     }
    
     function increment() {
     const num = getRandomNumber(0, poll.length);
     poll[num].votes += 20;
     }
    
     function updatePoll() {
     setInterval(() => {
     increment();
     pusher.trigger('poll-channel', 'update-poll', {
     poll,
     });
     }, 1000);
     }

    然后將/ poll端點更改為如下所示:

     app.get('/poll', (req, res) => {
     res.json(poll);
     updatePoll();
     });

    / poll路由將初始輪詢數據發送到客戶端并調用updatePoll()函數,該函數以三秒為間隔遞增隨機俱樂部的投票,并觸發我們在最后一步中在客戶端上創建的輪詢頻道的更新。

    通過從項目目錄的根目錄運行節點server.js,終止服務器并重新啟動它。此時,您應該有一個實時更新的條形圖。

    結論

    您已經看到了使用D3.js創建條形圖的過程以及如何使用Pusher Channels實時創建條形圖。

    我們已經為Pusher和D3提供了一個簡單的用例,但其中一個僅僅是表面上的問題。我建議深入研究docs,了解更多有關Pusher及其他功能的信息。

    謝謝閱讀!您可以在GitHub存儲庫中找到本教程的完整源代碼。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    使用D3.js構建實時圖形的示例代碼

    使用D3.js構建實時圖形的示例代碼:首先你需要在計算機上安裝Node和npm。 數據的可視化表示是傳遞復雜信息的最有效手段之一,D3.js提供了創建這些數據可視化的強大工具和靈活性。 D3.js是一個JavaScript庫,用于使用SVG,HTML和CSS在Web瀏覽器中生成動態的交互式數據可視化。 D3 提供了各種
    推薦度:
    標簽: 使用 代碼 的代碼
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 成人毛片在线观看 | 欧美 日韩 国产 在线 | 精品在线一区 | 亚洲欧美经典 | 亚洲欧美日韩中文字幕在线 | 欧美αv日韩αv另类综合 | 四虎影视最新网址 | 国产不卡在线 | 精品久久久久久久一区二区手机版 | 亚洲精品国产成人99久久 | 大陆日韩欧美 | 一区二区三区四区视频 | 国产99久久亚洲综合精品 | 国产视频首页 | 精品一区二区三区五区六区七区 | 国产不卡视频在线观看 | 国产成人久久精品激情91 | 久久伊人色 | 一区二区三区在线免费视频 | 成人一级毛片 | 97成人免费视频 | 久久国产精品电影 | 亚洲精品美女久久久aaa | 91中文字幕在线观看 | 国产不卡在线看 | 精品国产91 | 97国产精品欧美一区二区三区 | 国产高清免费视频 | 国产成人黄网址在线视频 | 国产欧美一区二区三区精品 | 亚洲欧洲国产经精品香蕉网 | 国外欧美一区另类中文字幕 | 91久久国产综合精品女同我 | 美女视频黄a视频免费全过程在线 | 午夜欧美性视频在线播放 | 成人免费久久精品国产片久久影院 | www.色人阁| 亚洲精品毛片久久久久久久 | 国产不卡在线观看 | 亚洲三级在线视频 | 免费一级a毛片在线播放直播 |