You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Dimple.js绘制日出日落图表遇阻,求技术指导

解决Dimple.js单图表展示日出日落双系列的问题

嘿,我来帮你搞定这个图表的问题!你遇到的核心点是数据格式转换多系列的正确配置,还有时间轴的用法,我一步步给你拆解:

首先,修正你的数据结构

你现在的data外面多套了一层数组,而且是「宽格式」(每个日期包含两个时间字段),Dimple处理多系列时更适合用「长格式」——也就是把日出、日落拆成单独的数据行,用一个字段来区分系列类型。修改后的数据应该是这样:

var data = [
  { "Date":"01/01/2018", "Type":"Sunrise", "Time":"08:10" },
  { "Date":"01/01/2018", "Type":"Sunset", "Time":"17:20" },
  { "Date":"02/01/2018", "Type":"Sunrise", "Time":"08:08" },
  { "Date":"02/01/2018", "Type":"Sunset", "Time":"17:25" },
  { "Date":"03/01/2018", "Type":"Sunrise", "Time":"08:06" },
  { "Date":"03/01/2018", "Type":"Sunset", "Time":"17:30" },
  { "Date":"04/01/2018", "Type":"Sunrise", "Time":"08:04" },
  { "Date":"04/01/2018", "Type":"Sunset", "Time":"17:35" },
  { "Date":"05/01/2018", "Type":"Sunrise", "Time":"08:02" },
  { "Date":"05/01/2018", "Type":"Sunset", "Time":"17:40" },
  { "Date":"06/01/2018", "Type":"Sunrise", "Time":"08:00" },
  { "Date":"06/01/2018", "Type":"Sunset", "Time":"17:45" }
];

然后,正确配置图表的轴和多系列

你之前用addTimeAxis的思路是完全正确的!因为时间是连续的数值,addCategoryAxis适合离散的分类(比如不同的城市名称),所以时间轴就该用addTimeAxis。接下来是完整的代码修改:

<html>
<div id="chartContainer"></div>
<script src="http://d3js.org/d3.v4.min.js"></script>
<script src="http://dimplejs.org/dist/dimple.v2.3.0.min.js"></script>
<script type="text/javascript">
var svg = dimple.newSvg("#chartContainer", 590, 400);
// 修正后的长格式数据
var data = [
  { "Date":"01/01/2018", "Type":"Sunrise", "Time":"08:10" },
  { "Date":"01/01/2018", "Type":"Sunset", "Time":"17:20" },
  { "Date":"02/01/2018", "Type":"Sunrise", "Time":"08:08" },
  { "Date":"02/01/2018", "Type":"Sunset", "Time":"17:25" },
  { "Date":"03/01/2018", "Type":"Sunrise", "Time":"08:06" },
  { "Date":"03/01/2018", "Type":"Sunset", "Time":"17:30" },
  { "Date":"04/01/2018", "Type":"Sunrise", "Time":"08:04" },
  { "Date":"04/01/2018", "Type":"Sunset", "Time":"17:35" },
  { "Date":"05/01/2018", "Type":"Sunrise", "Time":"08:02" },
  { "Date":"05/01/2018", "Type":"Sunset", "Time":"17:40" },
  { "Date":"06/01/2018", "Type":"Sunrise", "Time":"08:00" },
  { "Date":"06/01/2018", "Type":"Sunset", "Time":"17:45" }
];

var myChart = new dimple.chart(svg, data);
myChart.setBounds(70, 40, 490, 320);

// X轴:日期时间轴,解析格式是日/月/年,显示成"日 月缩写"(比如01 Jan)
var x = myChart.addTimeAxis("x", "Date", "%d/%m/%Y", "%d %b");
// Y轴:时间轴,解析小时:分钟,显示同样格式
var y = myChart.addTimeAxis("y", "Time", "%H:%M", "%H:%M");

// 关键:用"Type"字段区分系列,这样会自动生成日出、日落两条线
var series = myChart.addSeries("Type", dimple.plot.line, [x, y]);
series.lineMarkers = true; // 显示每个数据点的标记

myChart.addLegend(180, 10, 360, 20, "right");
myChart.draw();
</script>
</html>

关键知识点解释

  1. 数据格式转换:宽格式转长格式是Dimple处理多系列的常用方式,每个系列对应数据中的一个「类型」字段值,这样addSeries就能自动识别并生成多条线。
  2. 时间轴的选择addTimeAxis会把时间当作连续的数值处理,能正确展示时间的先后顺序和间隔,比addCategoryAxis更适合你的场景——后者会把日期当成离散的类别,无法体现时间的连续性。
  3. 格式字符串:注意addTimeAxis的第三个参数是解析格式(告诉Dimple怎么读你的数据),第四个是显示格式(图表上展示的样式),要和你的数据格式对应上,比如你的日期是日/月/年,所以解析格式用%d/%m/%Y

这样修改后,你就能在同一个图表里看到日出和日落两条线啦,图例也会自动区分两个系列~

内容的提问来源于stack exchange,提问作者Marco

火山引擎 最新活动