d3.js - 如何在 d3.js v3 中使用年份计算事件并绘制折线图
问题描述
我想问一下如何使用 csv 文件中的数据绘制折线图。
我已经使用样本数据集中的 csv 文件成功创建了一个折线图,并使用表示其频率的数据值绘制它们。
例如。日期频率 2000 年 1 月 1 日 39.81 2000 年 2 月 1 日 36.35 2000 年 3 月 1 日 43.22 2000 年 4 月 1 日 28.37 2000 年 5 月 1 日 25.45 2000 年 6 月 1 日 32.54 2000 年 7 月 1 日 28.4 2000 年 8 月 1 日 28.4
接下来我想做的是,只使用日期,并从日期的年份开始,计算相应年份有多少事件。
例如:日期(这是来自 csv 的实际日期格式) 10/20/2016 10/25/2016 11/17/2016 1/25/2017 3/13/2017 4/13/2017 4/21/2017 2017 年 5 月 4 日 2017 年 5 月 3 日 2017 年 6 月 2 日 2017 年 6 月 2 日 2017 年 6 月 8 日 2017 年 6 月 8 日 2017 年 6 月 12 日
所以对于 2016 年,我有 3 个事件或频率。对于 2017 年,我有 11 个,然后使用结果将其绘制在折线图上。
这可能吗 ?
注意:我正在使用 d3.js。v3
我在数据集 1 和数据集 2 中使用不同的 CSV 文件
我已经尝试并成功实现了类似于链接中的代码
https://www.d3-graph-gallery.com/graph/line_several_group.html
示例代码:
parseDate = d3.time.format("%b %d %Y").parse;
incidentline = d3.svg.line()
.x(function (d) { return x(d.date); })
.y(function (d) { return y(d.frequency); });
d3.csv('/samplegraphdata.csv', function (error, data) {
data.forEach(function (d) {
d.date = parseDate(d.date);
d.frequency = +d.frequency;
});
// Scale the range of the data
x.domain(d3.extent(data, function (d) { return d.date; }));
y.domain([0, d3.max(data, function (d) { return d.frequency; })]);
预期结果应该是一个折线图,其中 x 轴为年份,y 轴为计数。
并且正在从 CSV 读取数据。
我还没有实际结果,因为现在我只是想弄清楚如何做到这一点。
我对 CSV 中的日期格式感到抱歉
应该是这样的
(这是实际格式)
这是示例结果
这是数据集 2 的数据格式
很抱歉,如果我的问题难以阅读,我通常会在堆栈溢出中发布。
解决方案
我实际上成功地计算了数据。
这是解决方案
data.forEach(function (d) {
var splitdate = d.Date;
console.log(d.Date);
var year = splitdate.split('/')[2];
tally[year] = (tally[year] || 0) + 1;
console.log(tally[year]);
});
var data = [];
for (var year in tally) {
if (tally.hasOwnProperty(year)) {
data.push({
year: year,
frequency: tally[year]
});
console.log(data);
我的问题是如何清理 x 轴以反映正确的年份。
我不知道为什么变成 .016 .017 等
推荐阅读
- ember.js - 下拉列表 Ember On Pressing Cancel 按钮应该回滚
- cassandra - Datastax cassandra 驱动程序跳过空 UDT 字段
- php - 在php中从时间中删除毫秒
- javascript - 使用不需要包含它的页面的 js 和 css 的包含函数
- c# - 为什么物体永远不会在位置上移动?
- acumatica - Acumatica 无法在查找网格中找到数据视图
- python - 如何从序列化程序获得最低和最高价格?
- r - “跳过 3 个不可用的包:memoise、digest、lubidate” - 但这些包已下载
- javascript - 检查对象值的任何部分是否包含在字符串中
- asp.net-core - 在 Razor 视图中注入控制器与注入服务