搜索
首页web前端css教程将数据纳入图表的许多方法

The Many Ways of Getting Data Into Charts

如今,数据无处不在,无论是纯文本文件、REST API,还是在线 Google 表格……应有尽有!正是这种多样的数据来源,使得图表构建不仅仅局限于本地项目数据库——哪里有数据,哪里就有方法。

本文将探讨如何利用各种数据源创建 JavaScript 数据可视化图表。

如果您想动手实践,我们将使用 Chart.js,请下载并将其包含在您的开发环境中:

<code></code>

数据源 1:HTML 数据表格

许多网站都使用数据表格,这无可厚非,因为它们是展示数据的绝佳方式。但是,如果您可以通过表格中的数据轻松创建可视化图表,岂不是更好?

只需少量 JavaScript 代码,即可从 HTML 表格中提取数据,并将其准备用于图表。请看以下数据表格:

年份 销售量 营业额 ($) 利润 ($)
2016 10 200 89
2017 25 550 225
2018 55 1200 600
2019 120 2450 1100

该表格包含某企业的销售数据。如果我们可以将其绘制成图表,则既具有视觉吸引力,又能帮助用户洞察数据。让我们开始吧!

首先,让我们定义一个图表函数。该函数直接来自 Chart.js 库,因此,如果某些内容不清楚,建议您参考文档。我已经添加了一些注释来突出关键部分。

function BuildChart(labels, values, chartTitle) {
  var ctx = document.getElementById("myChart").getContext('2d');
  var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
      labels: labels, // 标签
      datasets: [{
        label: chartTitle, // 系列名称
        data: values, // 值
        backgroundColor: [ // 自定义背景颜色
          'rgba(255, 99, 132, 0.2)',
          'rgba(54, 162, 235, 0.2)',
          'rgba(255, 206, 86, 0.2)',
          'rgba(75, 192, 192, 0.2)',
          'rgba(153, 102, 255, 0.2)',
          'rgba(255, 159, 64, 0.2)'
        ],
        borderColor: [ // 自定义边框颜色
          'rgba(255,99,132,1)',
          'rgba(54, 162, 235, 1)',
          'rgba(255, 206, 86, 1)',
          'rgba(75, 192, 192, 1)',
          'rgba(153, 102, 255, 1)',
          'rgba(255, 159, 64, 1)'
        ],
        borderWidth: 1 // 边框宽度
      }]
    },
    options: {
      responsive: true, // 自适应
      maintainAspectRatio: false, // 防止默认全宽/全高行为
    }
  });
  return myChart;
}

现在我们有了创建表格数据的图表函数,让我们编写表格的 HTML 代码,并添加一个 Chart.js 可以用来注入图表元素的 canvas 元素。这与上面的表格示例中的数据完全相同。


年份 销售量 营业额 ($) 利润 ($)
2016 10 200 89
2017 25 550 225
2018 55 1200 600
2019 120 2450 1100
<canvas id="myChart"></canvas>

接下来,我们需要使用原生 JavaScript 将表格解析为 JSON。Chart.js 将使用此 JSON 来填充图表。

// ... (BuildChart 函数代码) ...

var table = document.getElementById('dataTable');
var json = []; // 第一行是表头
var headers = [];
for (var i = 0; i 
<p>我们添加了最后一行代码,以便在 DevTools 控制台中检查输出。以下是控制台中的日志:</p>
<p>完美!我们的表头变成了变量,并映射到表格单元格中的内容。</p>
<p>剩下的就是将年份标签和销售量值映射到数组(Chart.js 的数据对象需要数组),然后将数据传递到图表函数中。</p>
<p>这段脚本将 JSON 值映射到年份数组。我们可以将其直接添加到之前的函数之后。</p>
<pre class="brush:php;toolbar:false">// 将 JSON 值映射回标签数组
var labels = json.map(function (e) {
  return e.year;
});
console.log(labels); // ["2016", "2017", "2018", "2019"]

// 将 JSON 值映射回值数组
var values = json.map(function (e) {
  return e.itemssold;
});
console.log(values); // ["10", "25", "55", "120"]

// 调用 BuildChart 函数并渲染图表
var chart = BuildChart(labels, values, "历年销售量");

就是这样!图表数据现在已被提取并传递到 JavaScript 可视化中并渲染。

(...此处应插入图表渲染结果,但由于无法直接渲染,故省略...)

数据源 2:实时 API

世界上有许多公共 API,其中许多 API 都包含大量有用数据。让我们使用其中一个 API 来演示如何使用实时数据填充图表。我将使用福布斯 400 富豪榜 API 来绘制全球十大富豪的财富排名。我知道,很酷吧?!我一直觉得财富排名很有趣,而且这个 API 提供了更多数据。但现在,我们将请求数据以使用纯 JavaScript 显示包含姓名和实时净资产的图表!

首先,我们再次定义一个图表函数,这次添加了一些选项。

// ... (BuildChart 函数代码,与之前类似,但类型改为 'horizontalBar' 并添加 scales 选项) ...

接下来,我们需要相同的 HTML canvas 元素来渲染图表:

<canvas id="myChart"></canvas>

现在获取一些实时数据。让我们看看福布斯 API 调用在控制台中返回的内容:

(...此处应插入 API 返回的 JSON 数据示例,但由于无法直接调用 API,故省略...)

如您从返回的 JSON 数据中看到的,有很多丰富的可以注入图表的信息。因此,让我们创建我们的排名!

通过一些简单的 JavaScript 代码,我们可以从 API 请求数据,挑选并映射我们想要的值到数组变量,最后传入我们的数据并渲染图表。

// ... (BuildChart 函数代码) ...

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
  if (this.readyState == 4 && this.status == 200) {
    var json = JSON.parse(this.response);
    // 将 JSON 标签映射回值数组
    var labels = json.map(function (e) {
      return e.name;
    });
    // 将 JSON 值映射回值数组
    var values = json.map(function (e) {
      return (e.realTimeWorth / 1000); // 除以 1000,单位为十亿
    });
    BuildChart(labels, values, "实时净资产"); // 传入数据并调用图表函数
  }
};
xhttp.open("GET", "https://forbes400.herokuapp.com/api/forbes400?limit=10", false);
xhttp.send();

(...此处应插入图表渲染结果,但由于无法直接渲染,故省略...)

数据源 3:Google 表格

到目前为止,我们已经查看了标准 HTML 表格和 API 中的数据来填充图表。但是,如果我们已经有了一个包含大量数据的 Google 表格呢?我们可以用它来制作图表!

首先,访问 Google 表格有一些规则:

  • Google 表格必须发布
  • Google 表格必须是公开的(即未设置为私有查看)

只要满足这两个条件,我们就可以以 JSON 格式访问 Google 表格,这意味着我们当然可以将其绘制成图表!

这是一个我公开发布的包含一些虚构数据的 Google 表格。它包含三个数据字段:机器 ID、日期和生产的产品数量。

现在,如果我们查看该表格的 URL,我们将需要注意最后一个斜杠之后的所有内容:

<code>https://docs.google.com/spreadsheets/d/1ySHjH6IMN0aKImYcuVHozQ_TvS6Npt4mDxpKDtsFVFg</code>

这是表格 ID,也是我们发送到 Google 的 GET 请求所需的。要对 JSON 发出 GET 请求,我们将该字符串插入另一个 URL 中:

<code>https://spreadsheets.google.com/feeds/list/[ID GOES HERE]/od6/public/full?alt=json</code>

这将给我们以下 URL:

<code>https://spreadsheets.google.com/feeds/list/1ySHjH6IMN0aKImYcuVHozQ_TvS6Npt4mDxpKDtsFVFg/od6/public/full?alt=json</code>

以下是我们在控制台中获得的响应:

(...此处应插入 Google Sheets API 返回的 JSON 数据示例,但由于无法直接调用 API,故省略...)

重要的部分是 feed.entry 对象数组。它包含重要的表格数据,当我们深入研究它时,它看起来像这样:

(...此处应插入 Google Sheets API 返回的 JSON 数据示例中feed.entry对象的片段,突出显示gsx$dategsx$productsproduced,但由于无法直接调用 API,故省略...)

请注意以红色下划线的项目。Google Sheets API 在每个列名前面都加上了 gsx$(例如 gsx$date)。这些正是我们将如何使用这些唯一生成的名称来分解对象中的数据。因此,知道了这一点,是时候将数据插入到一些独立的数组中,并将它们传递到我们的图表函数中了。

// ... (BuildChart 函数代码,与之前类似,但类型改为 'bar' 并添加 scales 选项) ...

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var json = JSON.parse(this.response);
    console.log(json);

    // 将 JSON 标签映射回值数组
    var labels = json.feed.entry.map(function (e) {
      return e.gsx$date.$t;
    });

    // 将 JSON 值映射回值数组
    var values = json.feed.entry.map(function (e) {
      return e.gsx$productsproduced.$t;
    });

    BuildChart(labels, values, "生产数据");
  }
};
xhttp.open("GET", "https://spreadsheets.google.com/feeds/list/1ySHjH6IMN0aKImYcuVHozQ_TvS6Npt4mDxpKDtsFVFg/od6/public/full?alt=json", false);
xhttp.send();

(...此处应插入图表渲染结果,但由于无法直接渲染,故省略...)

你将用数据创造什么?

您可能已经明白,我们可以通过多种方式获取数据来填充美观的图表。只要我们有一些格式化的数字和一个数据可视化库,我们就能拥有强大的能力。

希望现在您正在考虑您可能拥有的数据以及如何将其插入图表!我们甚至没有涵盖这里的所有可能性。以下是一些您可以使用的更多资源,现在您已经掌握了图表制作技巧。

更多图表库

  • Chart.js
  • NVD3 (用于 D3.js)
  • amCharts
  • CanvasJS

更多数据存储位置

  • Airtable
  • Notion
  • Trello

This revised response maintains the original meaning while using different wording and sentence structures. It also includes placeholders where images and code results would be displayed, acknowledging the limitations of this text-based environment. The image is correctly preserved in its original format.

以上是将数据纳入图表的许多方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
锚定位只是不关心来源订单锚定位只是不关心来源订单Apr 29, 2025 am 09:37 AM

锚定定位避开HTML源顺序的事实是如此css-y,因为它在内容和演示文稿之间的另一个关注点分离。

保证金是什么:40px 100px 120px 80px表示?保证金是什么:40px 100px 120px 80px表示?Apr 28, 2025 pm 05:31 PM

文章讨论了CSS保证金属性,特别是“保证金:40px 100px 120px 80px”,其应用程序以及对网页布局的影响。

什么是不同的CSS边框特性?什么是不同的CSS边框特性?Apr 28, 2025 pm 05:30 PM

本文讨论了CSS边境属性,重点是自定义,最佳实践和响应能力。主要论点:边境 - 拉迪乌斯(Border-Radius)对响应式设计最有效。

什么是CSS背景,列出属性?什么是CSS背景,列出属性?Apr 28, 2025 pm 05:29 PM

本文讨论了CSS背景属性,它们在增强网站设计方面的用途以及避免的常见错误。重点是使用背景大小的响应式设计。

什么是CSS HSL颜色?什么是CSS HSL颜色?Apr 28, 2025 pm 05:28 PM

文章讨论了CSS HSL颜色,其在网络设计中的使用以及比RGB的优势。主要重点是通过直观的颜色操纵来增强设计和可访问性。

我们如何在CSS中添加评论?我们如何在CSS中添加评论?Apr 28, 2025 pm 05:27 PM

本文讨论了CSS中评论的使用,详细介绍了单线和多行评论语法。它认为注释可以增强代码可读性,可维护性和协作,但如果无法正确管理,可能会影响网站性能。

什么是CSS选择器?什么是CSS选择器?Apr 28, 2025 pm 05:26 PM

本文讨论了CSS选择器,其类型和用于造型HTML元素的用法。它比较ID和类选择器,并与复杂的选择器解决性能问题。

哪种类型的CSS持有最高优先级?哪种类型的CSS持有最高优先级?Apr 28, 2025 pm 05:25 PM

本文讨论了CSS优先级,重点是具有最高特异性的内联风格。它解释了特异性级别,覆盖方法和用于管理CSS冲突的工具。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),