使用d3.v5實現折線圖與面積圖

来源:https://www.cnblogs.com/feiquan/archive/2019/04/23/10759393.html
-Advertisement-
Play Games

d3最新是V5版的,比起V2的API變動了不少,寫下我實現過程 效果圖: 面積圖: 折線圖: 目錄結構: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="css/style.css" media=" ...


d3最新是V5版的,比起V2的API變動了不少,寫下我實現過程

效果圖:

面積圖:

折線圖:

 

目錄結構:

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="css/style.css" media="screen" rel="stylesheet" type="text/css"/>
    <title>Linechart1</title>
</head>
<body>
    <div id="container"></div>

    <script src="https://d3js.org/d3.v5.min.js"></script>
    <script src="js/index.js"></script>
</body>
</html>
index.html

 

#container{
    background: #ddd;
    width: 500px;
    height: 250px;
}

path{
    fill: none;
    stroke: steelblue;
    stroke-width: 2;
}

.domain ,.tick line{
    stroke:gray;
    stroke-width: 1;
}
style.css
var width=500,height=250,
    margin={left:50,top:30,right:20,bottom:20},
    g_width=width-margin.left-margin.right,
    g_height=height-margin.top-margin.bottom;

//svg
d3.select("#container").append("svg")
    //width,height
    .attr("width",width)
    .attr("height",height)

var g=d3.select("svg")
    .append("g")
    .attr("transform","translate("+margin.left+","+margin.top+")");

var data=[1,8,5,6,8,9,3,5,2]
//Scale
var scale_x=d3.scaleLinear()
    .domain([0,data.length-1])
    .range([0,g_width]);
var scale_y=d3.scaleLinear()
    .domain([0,d3.max(data)])
    .range([g_height,0]);

//畫線函數
var line_generator= d3.line()
    .x(function (d,i) {
        return scale_x(i);
    })
    .y(function (d) {
        return scale_y(d);
    })
    .curve(d3.curveMonotoneX)
    // .curve(d3.curveMonotoneX) // apply smoothing to the line

//畫路徑
g.append("path")
    .attr("d",line_generator(data)) //d="M1,0L20,40.....  d-path data

// //畫面積函數
// var area_generator= d3.area()
//     .x(function (d,i) {
//         return scale_x(i);
//     })
//     .y0(g_height)
//     .y1(function (d) {
//         return scale_y(d);
//     })
//     .curve(d3.curveMonotoneX)
//
// //畫面積
// g.append("path")
//     .attr("d",area_generator(data)) //d="M1,0L20,40.....  d-path data
//     .style("fill","steelblue")


//X軸
g.append("g")
    .call(d3.axisBottom(scale_x))
    .attr("transform","translate(0,"+g_height+")")

//Y軸
g.append("g")
    .call(d3.axisLeft(scale_y))

//y軸文字
g.append("text")
    .text("Price($)")
    .attr("transform","rotate(-90)")
    .attr("dy","1em")
    .attr("text-anchor","end")

其中,使用紅色部分,註釋綠色部分是面積圖

  使用綠色部分,註釋紅色部分是折線圖

  data數組是數據來源。

 

參考教程:https://www.imooc.com/learn/103


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 今天客戶提了個需求,因為我們的設備在正常情況下無法調節通話音量,只有在打電話過程中,按物理音量加減鍵才能出現調節通話音量seekBar,很不方便,於是乎需求就來了。需要優化兩個地方 1、在正常情況下,按物理音量加減鍵都顯示 通話音量調節seekBar,可方便快速調節通話音量 2、在Settin ...
  • MT8788設備具有集成的藍牙、fm、wlan和gps模塊,是一個高度集成的基帶平臺,包括數據機和應用處理子系統,啟用LTE/LTE-A和C2K智能設備應用程式。該晶元集成了工作在2.0GHz的ARM Cortex-A73、最高可達2.0GHz的ARM Cortex-A53和功能強大的多標準視頻 ...
  • 版權聲明:本文為HaiyuKing原創文章,轉載請註明出處! 前言 這個Demo只是記錄極光推送的集成,不能運行。 使用步驟 一、項目組織結構圖 註意事項: 1、 導入類文件後需要change包名以及重新import R文件路徑 2、 Values目錄下的文件(strings.xml、dimens. ...
  • Helio P90(mt6779)是一款人工智慧處理平臺,集成了超級強大的AI專核APU 2.0,具有超強的AI性能和一系列基於人工智慧的成像升級。該晶元將重新定義消費者對智能手機AI功能的體驗。Helio P90採用八核架構, 集成兩個ARM A75處理器,工作主頻率為2.2GHz,同時集成有六個 ...
  • 前言 這篇文章主要是關於移動端原筆跡的開發,讓平板上的手寫效果達到筆跡光滑且有筆鋒。 介紹關於原筆跡的演算法思路。 項目github地址 演算法思路分析 曲線擬合演算法 利用曲線擬合演算法增加虛擬的點,使得筆跡更加光滑,關於演算法思想本文采用的是B樣條插值演算法。 採集點:獲取筆輸出的兩個關鍵點a1、a2,以及 ...
  • 導語1:一個構造函數的原型對象,其實就是這個構造函數的一個屬性而已,屬性名叫prototype,值是一個對象,對象中有一些屬性和方法,所以每個構造函數的實例對象都擁有這些屬性和方法的使用權。 導語2:構造函數需要用 new 操作符來調用,它本身沒有任何意義,只有實例化後才有生命,當然你也可以把它當普 ...
  • 效果圖: 條形圖: 目錄結構: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="css/style.css" media="screen" rel="stylesheet" type="text/c ...
  • compass.app是集成了sass的工具,安裝完Compass就能夠使用sass。 首先,上官網 可以看到官網上推薦的兩種sass使用方式,application&command line application里不僅僅只有Compass,不過現在點擊Compass.app進行下載。 雖然通常我 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...