数据未填充到 d3 中
Data not populating in d3
这是我的 csv 文件:
我正在获取从另一个页面提交并存储在 sessionStorage 中的 csv link。
此图表来自highcharts.com
我一直在尝试获取 csv 数据并将其填充到 d3 图表中。但是数据在控制台中显示完美。但它不会填充图表。
你们能告诉我我错在哪里吗
我的代码:
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<figure class="highcharts-figure">
<div id="container"></div>
</figure>
<style>
.highcharts-figure,
.highcharts-data-table table {
min-width: 310px;
max-width: 800px;
margin: 1em auto;
}
#container {
height: 400px;
}
.highcharts-data-table table {
font-family: Verdana, sans-serif;
border-collapse: collapse;
border: 1px solid #ebebeb;
margin: 10px auto;
text-align: center;
width: 100%;
max-width: 500px;
}
.highcharts-data-table caption {
padding: 1em 0;
font-size: 1.2em;
color: #555;
}
.highcharts-data-table th {
font-weight: 600;
padding: 0.5em;
}
.highcharts-data-table td,
.highcharts-data-table th,
.highcharts-data-table caption {
padding: 0.5em;
}
.highcharts-data-table thead tr,
.highcharts-data-table tr:nth-child(even) {
background: #f8f8f8;
}
.highcharts-data-table tr:hover {
background: #f1f7ff;
}
</style>
<Script>
var a='year';
var b='value';
var c='month';
var CSVurl=sessionStorage.getItem("Miracle");
console.log(CSVurl);
d3.csv(CSVurl).then(makeChart);
function makeChart(days) {
var dayLabel = days.map(function(d){return d[a]});
var dayTemp = days.map(function(d) {return d[b]});
var dayBoy= days.map(function(d) {return d[c]});
console.log(dayLabel);
console.log(dayTemp);
console.log(dayBoy);
Highcharts.chart('container', {
chart: {
zoomType: 'xy'
},
title: {
text: 'Multi Axes chart'
},
// subtitle: {
// text: 'Source: WorldClimate.com'
// },
xAxis: [{
categories: dayLabel,
// categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
// 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'December'],
crosshair: true
}],
yAxis: [{ // Primary yAxis
labels: {
format: '{value}',
style: {
color: Highcharts.getOptions().colors[1]
}
},
title: {
text: b,
style: {
color: Highcharts.getOptions().colors[1]
}
}
}, { // Secondary yAxis
title: {
text: c,
style: {
color: Highcharts.getOptions().colors[0]
}
},
labels: {
format: '{value} mm',
style: {
color: Highcharts.getOptions().colors[0]
}
},
opposite: true
}],
tooltip: {
shared: true
},
legend: {
layout: 'vertical',
align: 'left',
x: 120,
verticalAlign: 'top',
y: 100,
floating: true,
backgroundColor:
Highcharts.defaultOptions.legend.backgroundColor || // theme
'rgba(255,255,255,0.25)'
},
series: [{
name: b,
type: 'column',
yAxis: 1,
data: dayTemp,
// data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
tooltip: {
}
}, {
name: c,
type: 'spline',
data:dayBoy,
// data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
tooltip: {
}
}]
});
}
</script>
我一直在尝试动态使用 csv 数据,而不是硬编码数据。所以我评论了那部分。
问题是 dayTemp
和 dayBoy
数组中的值是 string
类型,而 Highcharts 期望它们是 number
的数组。
使用 parseFlaot()
简单地解析 map
中的这些值应该可以解决问题。
var dayTemp = days.map(function(d) {
return parseFloat(d[b])
});
var dayBoy = days.map(function(d) {
return parseFloat(d[c])
});
这是我的 csv 文件:
我正在获取从另一个页面提交并存储在 sessionStorage 中的 csv link。
此图表来自highcharts.com 我一直在尝试获取 csv 数据并将其填充到 d3 图表中。但是数据在控制台中显示完美。但它不会填充图表。 你们能告诉我我错在哪里吗
我的代码:
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<figure class="highcharts-figure">
<div id="container"></div>
</figure>
<style>
.highcharts-figure,
.highcharts-data-table table {
min-width: 310px;
max-width: 800px;
margin: 1em auto;
}
#container {
height: 400px;
}
.highcharts-data-table table {
font-family: Verdana, sans-serif;
border-collapse: collapse;
border: 1px solid #ebebeb;
margin: 10px auto;
text-align: center;
width: 100%;
max-width: 500px;
}
.highcharts-data-table caption {
padding: 1em 0;
font-size: 1.2em;
color: #555;
}
.highcharts-data-table th {
font-weight: 600;
padding: 0.5em;
}
.highcharts-data-table td,
.highcharts-data-table th,
.highcharts-data-table caption {
padding: 0.5em;
}
.highcharts-data-table thead tr,
.highcharts-data-table tr:nth-child(even) {
background: #f8f8f8;
}
.highcharts-data-table tr:hover {
background: #f1f7ff;
}
</style>
<Script>
var a='year';
var b='value';
var c='month';
var CSVurl=sessionStorage.getItem("Miracle");
console.log(CSVurl);
d3.csv(CSVurl).then(makeChart);
function makeChart(days) {
var dayLabel = days.map(function(d){return d[a]});
var dayTemp = days.map(function(d) {return d[b]});
var dayBoy= days.map(function(d) {return d[c]});
console.log(dayLabel);
console.log(dayTemp);
console.log(dayBoy);
Highcharts.chart('container', {
chart: {
zoomType: 'xy'
},
title: {
text: 'Multi Axes chart'
},
// subtitle: {
// text: 'Source: WorldClimate.com'
// },
xAxis: [{
categories: dayLabel,
// categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
// 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'December'],
crosshair: true
}],
yAxis: [{ // Primary yAxis
labels: {
format: '{value}',
style: {
color: Highcharts.getOptions().colors[1]
}
},
title: {
text: b,
style: {
color: Highcharts.getOptions().colors[1]
}
}
}, { // Secondary yAxis
title: {
text: c,
style: {
color: Highcharts.getOptions().colors[0]
}
},
labels: {
format: '{value} mm',
style: {
color: Highcharts.getOptions().colors[0]
}
},
opposite: true
}],
tooltip: {
shared: true
},
legend: {
layout: 'vertical',
align: 'left',
x: 120,
verticalAlign: 'top',
y: 100,
floating: true,
backgroundColor:
Highcharts.defaultOptions.legend.backgroundColor || // theme
'rgba(255,255,255,0.25)'
},
series: [{
name: b,
type: 'column',
yAxis: 1,
data: dayTemp,
// data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4],
tooltip: {
}
}, {
name: c,
type: 'spline',
data:dayBoy,
// data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6],
tooltip: {
}
}]
});
}
</script>
我一直在尝试动态使用 csv 数据,而不是硬编码数据。所以我评论了那部分。
问题是 dayTemp
和 dayBoy
数组中的值是 string
类型,而 Highcharts 期望它们是 number
的数组。
使用 parseFlaot()
简单地解析 map
中的这些值应该可以解决问题。
var dayTemp = days.map(function(d) {
return parseFloat(d[b])
});
var dayBoy = days.map(function(d) {
return parseFloat(d[c])
});