当前位置: 首页 > news >正文

数据可视化:交互式图表与大屏展示

数据可视化:交互式图表与大屏展示

大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊数据可视化这个重要话题。作为一个全栈开发者,数据可视化是将数据转化为有意义信息的关键。今天就来分享一下交互式图表和大屏展示的实战经验。

数据可视化概述

可视化类型

类型说明适用场景
折线图展示趋势变化时间序列数据
柱状图对比数据大小分类数据比较
饼图展示占比关系比例数据
散点图展示相关性数据分布
热力图展示密度分布矩阵数据

设计原则

清晰性 → 易于理解 准确性 → 数据准确 美观性 → 视觉吸引力 交互性 → 支持用户交互

ECharts实战

基础配置

<!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script> </head> <body> <div id="chart" style="width: 600px; height: 400px;"></div> <script> const chart = echarts.init(document.getElementById('chart')); const option = { title: { text: '月度销售额' }, xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月'] }, yAxis: { type: 'value' }, series: [{ name: '销售额', type: 'bar', data: [1200, 1500, 1800, 2100, 2400, 2800] }] }; chart.setOption(option); </script> </body> </html>

交互式图表

const option = { title: { text: '销售趋势' }, tooltip: { trigger: 'axis', formatter: '{b}<br/>{a}: {c}万元' }, legend: { data: ['销售额', '订单数'] }, xAxis: { type: 'category', data: ['1月', '2月', '3月', '4月', '5月', '6月'] }, yAxis: [ { type: 'value', name: '销售额(万)' }, { type: 'value', name: '订单数' } ], series: [ { name: '销售额', type: 'line', data: [1200, 1500, 1800, 2100, 2400, 2800] }, { name: '订单数', type: 'bar', yAxisIndex: 1, data: [800, 950, 1100, 1250, 1400, 1600] } ] };

D3.js进阶

创建交互式图表

const data = [4, 8, 15, 16, 23, 42]; const svg = d3.select('svg'); const width = +svg.attr('width'); const height = +svg.attr('height'); const padding = 20; const xScale = d3.scaleLinear() .domain([0, d3.max(data)]) .range([padding, width - padding]); const yScale = d3.scaleBand() .domain(data.map((d, i) => i)) .range([padding, height - padding]) .padding(0.1); // 绘制矩形 svg.selectAll('rect') .data(data) .enter() .append('rect') .attr('x', padding) .attr('y', (d, i) => yScale(i)) .attr('width', (d) => xScale(d) - padding) .attr('height', yScale.bandwidth()) .attr('fill', 'steelblue') .on('mouseenter', function() { d3.select(this).attr('fill', 'orange'); }) .on('mouseleave', function() { d3.select(this).attr('fill', 'steelblue'); }); // 添加标签 svg.selectAll('text') .data(data) .enter() .append('text') .attr('x', (d) => xScale(d) + 5) .attr('y', (d, i) => yScale(i) + yScale.bandwidth() / 2) .attr('alignment-baseline', 'middle') .text((d) => d);

大屏展示

全屏布局

* { margin: 0; padding: 0; box-sizing: border-box; } body { width: 100vw; height: 100vh; overflow: hidden; background: #0a0e17; } .dashboard { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 1fr); gap: 20px; padding: 20px; height: 100%; } .card { background: linear-gradient(135deg, #1a1f35 0%, #0f1420 100%); border-radius: 12px; padding: 20px; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); }

动态数据更新

// 模拟实时数据 setInterval(() => { const newData = data.map(() => Math.floor(Math.random() * 50)); chart.setOption({ series: [{ data: newData }] }); }, 2000);

实战案例:实时监控大屏

<!DOCTYPE html> <html> <head> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script> <style> body { margin: 0; background: #0a0e17; } #dashboard { display: grid; grid-template-columns: 2fr 1fr; grid-template-rows: 1fr 1fr; height: 100vh; gap: 20px; padding: 20px; } .chart { background: #1a1f35; border-radius: 12px; } #main-chart { grid-column: 1; grid-row: 1 / 3; } </style> </head> <body> <div id="dashboard"> <div id="main-chart" class="chart"></div> <div id="stats-chart" class="chart"></div> <div id="realtime-chart" class="chart"></div> </div> <script> const mainChart = echarts.init(document.getElementById('main-chart')); const statsChart = echarts.init(document.getElementById('stats-chart')); const realtimeChart = echarts.init(document.getElementById('realtime-chart')); // 主图表配置 mainChart.setOption({ title: { text: '业务概览', textStyle: { color: '#fff' } }, tooltip: { trigger: 'axis' }, grid: { left: '3%', right: '4%', bottom: '3%', containLabel: true }, xAxis: { type: 'category', data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], axisLabel: { color: '#fff' } }, yAxis: { type: 'value', axisLabel: { color: '#fff' } }, series: [{ type: 'line', data: [1200, 1320, 1010, 1340, 1900, 2300, 2100], lineStyle: { color: '#5470c6' } }] }); // 定期更新 setInterval(() => { const newData = [1200 + Math.random() * 1000, 1320 + Math.random() * 1000, 1010 + Math.random() * 1000, 1340 + Math.random() * 1000, 1900 + Math.random() * 1000, 2300 + Math.random() * 1000, 2100 + Math.random() * 1000]; mainChart.setOption({ series: [{ data: newData }] }); }, 3000); </script> </body> </html>

最佳实践

1. 响应式设计

// 响应式图表 window.addEventListener('resize', () => { chart.resize(); });

2. 数据标签

const option = { series: [{ type: 'bar', data: [1200, 1500, 1800], label: { show: true, position: 'top', formatter: '{c}万' } }] };

总结

数据可视化是将数据转化为洞察力的强大工具。通过ECharts和D3.js,可以创建美观、交互性强的数据可视化图表。

我的鬃狮蜥Hash对数据可视化也有自己的理解——它总是能从环境中识别出蟋蟀的位置,这也许就是自然界的"数据可视化"吧!

如果你对数据可视化有任何问题,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!


技术栈:ECharts · D3.js · 数据可视化

http://www.jsqmd.com/news/874350/

相关文章:

  • 2026年现阶段,如何选择武汉诚信的沸石转轮+RTO设备服务商?武汉润华环保设备领航者深度解析 - 2026年企业推荐榜
  • 从‘搭积木’到‘懂原理’:手把手拆解CNN-BiLSTM,用Python预测股价为什么有效(附完整代码)
  • 2026煤矿用涂塑复合钢管品牌推荐榜:聚氨酯保温管材、聚氨酯保温钢管、聚氨酯发泡保温管、聚氨酯成品保温管、聚氨酯热水保温管选择指南 - 优质品牌商家
  • Unity基地建造系统架构设计:状态机、网格与解耦实践
  • rk3566 配置HDMI的屏的流程
  • Linux-安装cmatrix
  • 2026南京本地推广公司推荐榜:腾讯元宝推广公司/苏州抖音代运营公司/苏州本地推广公司/门窗行业线上怎么获客/高端全屋定制IP打造团队/选择指南 - 优质品牌商家
  • Ettin Reranker 出了一整个家族,我帎你把选哪个说清楚
  • 华为VRPv8 HTTPS服务器配置与TLS协议深度排错指南
  • Laravel10.x重磅升级:8大新特性解析
  • AI破解秋衣秋裤内卷,重构秋冬保暖产业格局
  • 兰亭妙微|UI设计外包中的UI图标设计核心技巧与设计师职业发展指南
  • 【v2026.5.9新版】OpenClaw(原Clawdbot/Moltbot)部署指南,无需命令一键配置详细教程
  • 大模型训练全流程拆解:7个阶段+12个关键参数,新手也能看懂
  • 2026进户门精选:四川保温门/四川入户门/四川别墅入户门/四川加厚防盗门/四川单开门/四川子母门/四川安全门/选择指南 - 优质品牌商家
  • 【陕西专升本】2026陕西专升本真题
  • Unity Mod Manager原理与实战:模组冲突调停与运行时调度
  • 从事件关系网络看现有AI技术:一个统一的底层解释框架
  • 昇腾CANN cmake:CANN 项目的 CMake 构建模块实战
  • 使用SenseNova-U1开源模型生图新体验
  • 分享beat.ly ai换脸 换装 解锁会员版
  • 奇迹MU 荣耀出征官网下载:成长系统完善,荣耀稳步进阶!
  • 2026年5月更新:安徽市场优选,深度解析河北腾森环保设备有限公司的乙烯基酯树脂玻璃钢隔膜架实力 - 2026年企业推荐榜
  • 如何在Mac上实现NTFS完美读写:Free NTFS for Mac终极指南
  • 从SaTC 2.0报告看安全可信计算:硬件、AI与密码学的范式转移与工程实践
  • 昇腾CANN skills:社区技能与开发工具集的实战解读
  • 2026靠谱耐火砖厂家推荐榜:耐火砖厂家联系方式、耐火砖厂家联系电话、耐火砖哪家好、耐火砖采购、附近建筑砖厂、附近的耐火砖厂选择指南 - 优质品牌商家
  • 华硕笔记本性能优化终极指南:3步告别Armoury Crate臃肿,G-Helper轻量控制方案
  • 计算机视觉模型公平性优化:如何规避帕累托低效陷阱
  • 我的世界服务器官网源码1.0正式发布!