操作 Chart.js 柱状图:展示金额、零值与总计的体验

プログラミング・Web開発カテゴリを表すパンダのイラスト 编程・Web开发

关于本文
本文是通过利用生成式 AI 的自动生成工作流创建的。通过虚拟数据和浏览器操作,学习 Chart.js 的用途、机制以及发生故障时的观察要点。不会访问实际的服务或个人信息。

验证状态:在 2026-10-30 之前的既往审查中,将官方文档与已保存的 Daily Code 的固定源码进行对照,并记录了 Node.js 语法检查的结果。浏览器的实际操作、渲染以及 CDN 响应尚未经过验证。对屏幕的说明是根据代码得出的预期值,与实际测量值有所区别。

项目内容
对象Chrome/Edge/Firefox 等现代浏览器(实机兼容性未确认)
使用的库Chart.js(教材内版本:4.5.1)
费用演示源码本身不需要付费 API。通信费用和使用条件取决于环境
数据页面内的虚拟数据。无需认证信息、位置信息、企业数据
学习操作调整虚拟交通费以更新图表与总计

为什么要尝试这项技术

即使将数字排列在表格中,有时也很难直观地掌握变化的大小。Chart.js 是一个只需编写相对较少代码即可绘制折线图和柱状图的库。这次的主题是虚拟零花钱,将伙食费、交通费和教材费这三项制成柱状图。不仅要制作外观精美的图表,还要确认将输入设为 0 时的含义,以及如何保持总计值与图表中的值不发生冲突。

在制作动态示例时,不能止步于“界面动了”这一表象,而需要区分“哪个输入改变了哪个变量,哪段处理更新了绘制”。在本节教材中,我们会将这种变化在屏幕上明确展示出来。在将其引入实际服务时,请另外设计认证和存储处理。

首先尝试:实时演示与预期结果

打开页面后,会显示交通费为 3000 日元的虚拟值柱状图。将滑块降至 0 时,柱子高度变为 0,总额也会减少。因为没有修改餐费 5000 日元和教材费 1800 日元,所以计算出的总额应该是 6800 日元。接着将交通费提升至 9000 日元,对比总额是否变成了 15800 日元。金额单位在数据集名称和状态显示中已标明为日元。由于纵轴刻度本身未附加日元符号,请注意不要误读单位。预期输出是编辑上的计算结果,并非实际浏览器的观察结果。

操作前需确认的事项

  1. 确认您的电脑可以运行 JavaScript。不需要管理员权限。

  2. 打开浏览器的开发者工具,做好准备检查控制台(Console)是否有错误、网络面板(Network)是否有 CDN 获取失败的情况。

  3. 如果演示尚未公开,请将 Daily Code 的 docs/demos/chartjs-pocket-money/index.html 和 app.js 保存到同一个文件夹中。教材的 web/chartjs-pocket-money/ 包含 README,而要运行的 HTML/JS 在 docs/demos/ 侧。

  4. 在保存了这两个文件的文件夹中打开终端,在 Windows 上运行 py -3 -m http.server 8000 --bind 127.0.0.1,在 Linux/macOS 上运行 python3 -m http.server 8000 --bind 127.0.0.1。如果没有 Python,请在能够使用本地 HTTP 服务器的其他开发环境中托管该文件夹。在浏览器中打开 http://127.0.0.1:8000/,结束时在终端中按 Ctrl+C。需要能够连接外部 CDN 的环境。

  5. 屏幕上会出现3根柱子和一个滑块,请确认下方的状态显示是否为初始值 SUCCESS: 合計 9800円(架空)。当交通费设为0时,期望值为 SUCCESS: 合計 6800円(架空);设为9000时,期望值为 SUCCESS: 合計 15800円(架空)。这是根据代码计算得出的值,并非在实际浏览器中的成功实测值。

  6. READY: JavaScriptを読み込み中 如果保持不变,则脚本的获取或执行可能已经停止。SUCCESS 即使显示了 ,也请分别确认以下三点:柱状图是否绘制、滑块是否可操作、Console控制台是否无报错。特别是 Chart is not defined 是CDN获取失败的常见原因。

  7. 对比操作前后的结果。如果与期望值不同,请先记录“什么没有显示出来”。

原理总览图

flowchart LR
    A["入力やクリック"] --> B["イベントを受ける"]
    B --> C["Chart.js のAPI"]
    C --> D["状態と描画を更新"]
    D --> E["見た目と文字で確認"]

此图是用于学习的概念图,并未展示浏览器内部实现或网络通信的细节。不过,追踪“操作如何传递到哪个变量”是各种库的共同点。

它是如何运作的:解读API

将Chart实例绑定到HTML的canvas上。labels是横轴排列的项目名称,datasets是实际数值和颜色等数据的组合。当事件发生时,如果只修改dataset中的一个元素并调用chart.update,新数据就会反映到绘制中。Chart.js的update比完全重新创建实例要简单。如果多次创建实例并继续使用现有的canvas,则会导致意图之外的重复绘制或未能正确销毁。

如何阅读最小代码

const chart = new Chart(canvas, {
  type: "bar", data: { labels: ["食費", "交通費"], datasets: [{ data: [5000, 3000] }] }
});
chart.data.datasets[0].data[1] = 0;
chart.update();

以上是提取了API要点的片段。它不是可供复制并独立运行的完整文件。运行所需的HTML和完整实现请参见Daily Code侧的README/演示文件。请追踪哪个函数选择了HTML元素、哪一行更新了数值,并使用已知的虚拟数据进行尝试。

每次只更改一个条件进行比较

如果要在横轴上添加一个项目,只增加label却忘记增加对应的值数组,会导致对应关系紊乱。必须测试项目名称、数值和颜色的排列是否始终一一对应。在当前的演示中,数值直接由输入生成,因此负数、小数、字符串等输入都通过范围滑块进行了限制。当扩展为导入CSV等功能时,请优先对输入的类型和数量进行验证。

比较的步骤是:记录初始值,只更改一个地方,然后确认结果是否出现在预期的部位。如果同时更改多个输入,就会无法分清究竟是哪个产生了影响。请连同恢复到修改前状态的操作一起进行验证。

发生故障时应该检查哪里

零和缺失值是两码事。0元是一个“没有费用”的测量值,而null或空白则可能意味着“未能测得”。如果擅自将缺失值更改为0元,与总计或平均值的差异就会引起误解。此外,如果将纵轴的起点更改为中间的某个值,微小的差异看起来就会很大,因此需要明确比较的目的并添加注释。由于有些人仅通过图表图像无法读取内容,因此数值和总计也应保留在HTML正文中。

观察到的状态区分点应对示例
屏幕保持初始状态不变脚本获取、初始化、事件注册检查 Console / Network / script标签
显示内容发生了变化但含义不正确输入值、数组、单位、更新目标固定数值,逐个条件进行检查
无法点击按钮选择器与DOM生成顺序检查HTML以确认id是否一致
仅在部分终端上无法运行浏览器功能、权限、CDN、性能记录终端及版本、复现操作

浏览器内部的错误与公开Web服务器的故障是不同的。前者通过开发者工具中的错误内容进行调查,后者则通过HTTP响应和资源分发条件进行调查。不将未知的失败表述为成功,能够提升技术笔记的可靠性。

在业务和学习中的应用

它适用于需要快速可视化大量项目的场景,例如设备数量、服务器监控指标、培训问卷等。在监控用途中,必须单独设计更新时间、缺失值、汇总单位和阈值的含义。Chart.js是一个辅助绘制的库,并不保证汇总值的正确性。

引入前需要决定的事项

在向读者公开时,需要确定显示的数据来源、谁可以修改、留在屏幕上的信息种类,以及更新库时的确认事项。本次演示既没有登录,也没有服务器保存。因此,在添加运营功能之前,建议首先区分“按预期显示的最小部分”和“需要实际业务可靠性、权限和备份的部分”。由于第三方CDN涉及外部通信,因此需要提前确认企业网络是否允许。

与其它方式进行比较

方式适用场景注意事项
Chart.js通过修改虚拟的交通费来更新图表和总计等符合目的的场景需要管理依赖库的更新和使用条件
浏览器标准API自主开发小型功能自行确认规范和兼容性
静态图像与表格无需操作的说明无法当场体验状态的变化

库是在需要时选择的工具。应将想要达成的内容与学习成本结合起来进行比较。在小规模页面中,不把“引入库”作为目的会更易于维护。

GitHub 示例

博客正文负责背景和思路,Daily Code 负责运行和改造代码,两者分工明确。不包含用于向外部服务发布或保存的 API。

官方信息与一手信息

资料查阅范围: 于 2026 年 10 月 30 日重新查阅了 Chart.js 官方的简介、柱状图及更新 API。这并不保证链接内容的未来变更或所有 CDN 资产的响应。

验证范围补充

可参考 Daily Code 的固定提交以及现有的 Node.js 语法检查结果。但未验证实际浏览器的屏幕显示、库 CDN 的响应以及所有终端上的运行情况。实际运行效果请读者在自身环境中利用控制台(Console)和网络面板(Network)进行确认。

文档信息

文章??
操作 Chart.js 柱状图:展示金额、零值与总计的体验
?布日期
更新日期
来源
https://papanda925.com/?p=18284&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制