如何製作疫情餅狀統計圖

本文將從多個方面詳細闡述疫情餅狀統計圖的製作方法和注意事項。

一、選擇數據源

在製作疫情餅狀統計圖之前,需要先選擇數據源。最好選擇權威可靠的數據來源,比如世界衛生組織等組織發布的數據。如果是初學者,可以選擇一些比較簡單的數據進行實踐。

// 示例代碼
let data = [
  { label: '確診', value: 1000 },
  { label: '治癒', value: 500 },
  { label: '死亡', value: 80 }
];

二、準備畫布

在HTML文件中準備一個畫布,可以使用canvas或svg。這裡我們使用svg進行舉例。需要注意畫布的寬高以及顏色搭配。

// 示例代碼

  
  
    
  

三、繪製餅狀圖

繪製餅狀統計圖的代碼比較複雜,需要用到數學計算和svg路徑的繪製。具體代碼可以參考下面的示例代碼。

// 示例代碼
function drawPieChart(data, radius) {
  let total = data.reduce((acc, curr) => acc + curr.value, 0);
  let startAngle = 0;
  let endAngle = 0;
  let colors = ['#f9d5e5', '#eeac99', '#e06377', '#c83349', '#8b0000'];
  let g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
  for (let i = 0; i < data.length; i++) {
    let percent = data[i].value / total;
    endAngle = startAngle + percent * 2 * Math.PI;
    let x1 = radius * Math.sin(startAngle);
    let y1 = -radius * Math.cos(startAngle);
    let x2 = radius * Math.sin(endAngle);
    let y2 = -radius * Math.cos(endAngle);
    let largeArcFlag = percent > 0.5 ? 1 : 0;
    let pathData = `M 0 0 L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`;
    let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
    path.setAttributeNS(null, 'fill', colors[i % colors.length]);
    path.setAttributeNS(null, 'd', pathData);
    g.appendChild(path);

    startAngle = endAngle;
  }
  return g;
}

let svg = document.querySelector('svg');
let g = drawPieChart(data, 200);
svg.appendChild(g);

四、添加標籤和說明

為了讓餅狀圖更加清晰明了,可以添加標籤和說明。可以使用svg中的text元素來添加文字,並進行位置和樣式的控制。

// 示例代碼
let labels = ['確診', '治癒', '死亡'];
for (let i = 0; i < data.length; i++) {
  let percent = ((data[i].value / total) * 100).toFixed(1);
  let x = 270 * Math.sin((startAngle + endAngle) / 2);
  let y = -270 * Math.cos((startAngle + endAngle) / 2);
  let text = `${labels[i]}:${data[i].value} (${percent}%)`;
  let textElem = document.createElementNS('http://www.w3.org/2000/svg', 'text');
  textElem.setAttributeNS(null, 'x', x);
  textElem.setAttributeNS(null, 'y', y);
  textElem.innerHTML = text;
  g.appendChild(textElem);
  startAngle = endAngle;
}

五、完整代碼:疫情餅狀統計圖

下面是完整的HTML代碼,包括數據源、畫布準備、繪製餅狀圖、添加標籤和說明等步驟。

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>疫情餅狀統計圖</title>
</head>
<body>
  <svg width="500" height="500">
    <rect x="0" y="0" width="100%" height="100%" fill="#fff" />
    <g transform="translate(250,250)">
    </g>
  </svg>

  <script>
    let data = [
      { label: '確診', value: 1000 },
      { label: '治癒', value: 500 },
      { label: '死亡', value: 80 }
    ];

    function drawPieChart(data, radius) {
      let total = data.reduce((acc, curr) => acc + curr.value, 0);
      let startAngle = 0;
      let endAngle = 0;
      let colors = ['#f9d5e5', '#eeac99', '#e06377', '#c83349', '#8b0000'];
      let g = document.createElementNS('http://www.w3.org/2000/svg', 'g');
      for (let i = 0; i < data.length; i++) {
        let percent = data[i].value / total;
        endAngle = startAngle + percent * 2 * Math.PI;
        let x1 = radius * Math.sin(startAngle);
        let y1 = -radius * Math.cos(startAngle);
        let x2 = radius * Math.sin(endAngle);
        let y2 = -radius * Math.cos(endAngle);
        let largeArcFlag = percent > 0.5 ? 1 : 0;
        let pathData = `M 0 0 L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`;
        let path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
        path.setAttributeNS(null, 'fill', colors[i % colors.length]);
        path.setAttributeNS(null, 'd', pathData);
        g.appendChild(path);

        startAngle = endAngle;
      }
      return g;
    }

    let svg = document.querySelector('svg');
    let g = drawPieChart(data, 200);
    svg.appendChild(g);

    let labels = ['確診', '治癒', '死亡'];
    for (let i = 0; i < data.length; i++) {
      let percent = ((data[i].value / total) * 100).toFixed(1);
      let x = 270 * Math.sin((startAngle + endAngle) / 2);
      let y = -270 * Math.cos((startAngle + endAngle) / 2);
      let text = `${labels[i]}:${data[i].value} (${percent}%)`;
      let textElem = document.createElementNS('http://www.w3.org/2000/svg', 'text');
      textElem.setAttributeNS(null, 'x', x);
      textElem.setAttributeNS(null, 'y', y);
      textElem.innerHTML = text;
      g.appendChild(textElem);
      startAngle = endAngle;
    }
  </script>
</body>
</html>

原創文章,作者:VTXZL,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/375510.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VTXZL的頭像VTXZL
上一篇 2025-04-29 12:49
下一篇 2025-04-29 12:49

相關推薦

  • 用Python畫疫情地圖

    COVID-19疫情在全世界範圍內肆虐了數月,為了讓人們了解當前疫情的最新情況,很多技術人員都開始使用數據可視化的手段展示疫情數據。其中一個重要的展示形式就是利用Python編程語…

    編程 2025-04-29
  • 使用Python Flask和Echarts展示疫情數據

    這篇文章將介紹如何使用Python Flask和Echarts製作一個能夠展示疫情統計數據的網頁。 一、安裝依賴庫 首先,需要安裝Python Flask和Echarts的依賴庫。…

    編程 2025-04-27
  • 疫情危機對社會的影響

    一、經濟方面 疫情危機對經濟帶來了巨大的影響。一方面,各地採取措施防止疫情擴散,有關部門要求人們不要出門,這就導致了消費市場的大幅萎縮。另一方面,企業出現工人返工不及時,生產受到了…

    編程 2025-02-05
  • php排名算法,php排名統計圖

    本文目錄一覽: 1、常見的php排序算法 2、php如何實現分數排名,判斷該學生第幾名,如圖 3、PHP中的快速排序算法如何實現倒序? 4、php幾種排序算法實例詳解 5、PHP實…

    編程 2025-01-16
  • 疫情數據API完整解析

    一、疫情數據API接口 疫情數據API接口可以獲取關於全球各地疫情的數據,包括確診、死亡、治癒等各項指標的實時數據。接口訪問方式包括HTTP和Websocket兩種,能夠滿足不同場…

    編程 2025-01-11
  • 包含java疫情數據分析系統1的詞條

    本文目錄一覽: 1、用java開發的簡單系統有哪些系統啊? 2、本次突發疫情的數據? 3、java是做數據分析最好的方法嗎 用java開發的簡單系統有哪些系統啊? 用java開發的…

    編程 2025-01-04
  • java疫情數據分布系統項目,java疫情防控系統

    本文目錄一覽: 1、java的某些項目為什麼要採用分布式開發?什麼是分布式開發? 2、java適合做什麼項目? 3、java寫的帶數據庫的程序如何在沒安裝數據庫的系統上運行 4、如…

    編程 2024-12-14
  • 深度解析疫情API

    一、API簡介 COVID-19疫情在全球範圍內蔓延,因此疫情API助手可以幫助我們更好地了解世界範圍內疫情數據。疫情API是一個現代化的開放數據接口,可以讓開發者和研究者在其應用…

    編程 2024-12-12
  • 包含疫情餅狀圖python代碼實現的詞條

    本文目錄一覽: 1、「Python」使用Pyecharts生成疫情分布地圖 2、python中如何畫餅圖 3、如何用python繪製各種圖形 「Python」使用Pyecharts…

    編程 2024-12-12
  • 哈爾濱java,哈爾濱疫情

    本文目錄一覽: 1、哈爾濱java培訓哪家好? 2、在哈爾濱學會JAVA後,工資大概多少? 3、哈爾濱Java培訓學校哪家好,學多久 4、哈爾濱java培訓機構哪個好? 5、哈爾濱…

    編程 2024-12-10

發表回復

登錄後才能評論