如何制作疫情饼状统计图

本文将从多个方面详细阐述疫情饼状统计图的制作方法和注意事项。

一、选择数据源

在制作疫情饼状统计图之前,需要先选择数据源。最好选择权威可靠的数据来源,比如世界卫生组织等组织发布的数据。如果是初学者,可以选择一些比较简单的数据进行实践。

// 示例代码
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/n/375510.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
VTXZLVTXZL
上一篇 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

发表回复

登录后才能评论