javascript - ChartJS 时间轴未正确绘制 | 得到一个小时而不是日期
问题描述
我有一个时间序列,它是一个 CSV 文件(pastebin 链接)。我正在尝试在 Y 轴上绘制累积时间(其中一列),在 X 轴上绘制日期,在任务完成时绘制工具提示。Y 轴和工具提示工作正常,但 X 轴日期不能。我没有在 X 轴上获得日期,而是获得了时间。我不确定为什么会这样。有人可以帮忙吗?
如果我能更好地与您分享这些文件,请告诉我,我可以尝试这样做以方便您。
结果:
HTML(粘贴箱):
<!DOCTYPE html>
<html lang="en">
<head>
<title>Task progress scatter chart</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8">
<!-- Load jQuery -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<!-- Load Chart.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.8.0/Chart.bundle.min.js"></script>
<!-- Load D3.js to read csv files -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.9.7/d3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>
</head>
<body>
<canvas id="container" style="width:100%; height:400px;"></canvas>
<script src="./script_ed5101.js"></script>
</body>
</html>
带有图表的Java 脚本(粘贴 bin ):
$(document).ready(function() {
var TITLE = 'Task progress';
var POINT_X = 'date'; // column name for x values in data csv
var POINT_X_PREFIX = ''; // prefix for x values, eg '$'
var POINT_X_POSTFIX = ''; // postfix for x values, eg '%'
var POINT_Y = 'cumulative'; // column name for y values in data.csv
var POINT_Y_PREFIX = ''; // prefix for x values, eg 'USD '
var POINT_Y_POSTFIX = ''; // postfix for x values, eg ' kg'
var POINT_NAME = 'task'; // point names that appear in tooltip
var POINT_COLOR = 'rgba(0,0,255,0.7)'; // point color, eg `black` or `rgba(10, 100, 44, 0.8)`
var POINT_RADIUS = 3; // radius of each data point
var X_AXIS = 'Date'; // x-axis label and label in tooltip
var Y_AXIS = 'Cumulative time on tasks'; // y-axis label and label in tooltip
var SHOW_GRID = true; // `true` to show the grid, `false` to hide
// Read data file and create a chart
d3.csv('./time_series.csv').then(function(rows) {
var data = rows.map(function(row) {
return {
x: row[POINT_X],
y: row[POINT_Y],
name: row[POINT_NAME]
}
})
var scatterChartData = {
datasets: [{
label: 'task progress',
backgroundColor: POINT_COLOR,
data: data,
pointRadius: POINT_RADIUS,
pointHoverRadius: POINT_RADIUS + 2,
}]
};
var ctx = document.getElementById('container').getContext('2d');
Chart.Scatter(ctx, {
data: scatterChartData,
options: {
title: {
display: true,
text: TITLE,
fontSize: 14,
},
legend: {
display: false,
},
scales: {
xAxes: [{
type: 'time',
distribution: 'series',
scaleLabel: {
display: true,
labelString: X_AXIS
},
gridLines: {
display: SHOW_GRID,
},
ticks: {
callback: function(value, index, values) {
return POINT_X_PREFIX + value.toLocaleString() + POINT_X_POSTFIX;
}
}
}],
yAxes: [{
scaleLabel: {
display: true,
labelString: Y_AXIS
},
gridLines: {
display: SHOW_GRID,
},
ticks: {
callback: function(value, index, values) {
return POINT_Y_PREFIX + value.toLocaleString() + POINT_Y_POSTFIX;
}
}
}]
},
tooltips: {
displayColors: false,
callbacks: {
title: function(tooltipItem, all) {
return [
all.datasets[tooltipItem[0].datasetIndex].data[tooltipItem[0].index].name,
]
},
label: function(tooltipItem, all) {
return [
X_AXIS + ': ' + POINT_X_PREFIX + tooltipItem.xLabel.toLocaleString() + POINT_X_POSTFIX,
Y_AXIS + ': ' + POINT_Y_PREFIX + tooltipItem.yLabel.toLocaleString() + POINT_Y_POSTFIX
]
}
}
}
}
});
});
});
解决方案
推荐阅读
- python - 如何使 python 数据透视表(边距 = True)返回行/列的总和,而不是平均值?
- tensorflow - TF2.0保存或冻结图或onnx模型中将双线性调整大小更改为最近邻(NN)的方法
- haskell - Haskell Fibonacci达到最大指定数字?
- rdf - 如何将多个本体上传到 protégé?
- c# - 试图完成一个问题,我一直遇到 get Object Reference not set to an instance of an object line 31
- go - Go Rod If 按钮
- c++ - 在 CMake 中将标头编译为可执行文件
- angular - 刷新令牌请求被发送两次 - 寻找除 HttpBackend 之外的另一种解决方案
- python - 如何不断更新 Flask 中视图函数中使用的变量?
- javascript - 我怎样才能让我的机器人对反应做出反应?