gpt4 book ai didi

javascript - 如何外部化我的数据

转载 作者:行者123 更新时间:2023-11-27 22:51:12 25 4
gpt4 key购买 nike

我是 d3.js 和 Javascript 的新手,目前正在尝试使用 d3 构建图表。我的数据当前放置在 dataArray var 中,但我想将其外部化。每次我尝试使用另一个文件或不同的数据格式时,它都不起作用。这是我的代码:

<!DOCTYPE html>
<html>

<head>
<meta>
<meta http-equiv="refresh" content="">
<meta name="description" content="Drawing Shapes w/ D3 - " />
<meta charset="utf-8">
<title>Resources per Project</title>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

<style type="text/css">
h1 {
font-size: 35px;
color: darkgrey;
font-family: Helvetica;
border-bottom-width: 3px;
border-bottom-style: dashed;
border-bottom-color: black;
}
h2 {
font-size: 20px;
color: black;
font-family: Helvetica;
text-decoration: underline;
margin-left: 290px;
margin-top: 0px;
}
</style>
</head>

<body>
<h1>Resources used per Project</h1>
<script type="text/javascript">
var width = 600
var height = 500
var emptyVar = 0
var dataArray = [0.35, 1.66, 3.04, 1.54, 3.45, 2.56, 2.29, 1.37];
var emptyData = [];
var widthScale = d3.scale.linear()
.domain([0, 5])
.range([0, width]);

var color = d3.scale.linear()
.domain([0, 5])
.range(["#000066", "#22abff"])

var axis = d3.svg.axis()
.ticks("10")
.scale(widthScale);

var canvas = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(30, 0)");

var bars = canvas.selectAll("rect")
.data(dataArray)
.enter()
.append("rect")
.attr("width", emptyVar)
.attr("height", 50)
.attr("fill", function(d) {
return color(d)
})
.attr("y", function(d, i) {
return i * 55
})

canvas.append("g")
.attr("transform", "translate(0, 430)")
.attr("font-family", "Helvetica")
.attr("font-size", "15px")
.call(axis);

bars.transition()
.duration(1500)
.delay(200)
.attr("width", function(d) {
return widthScale(d);
})
</script>
<h2>Resources</h2>
</body>

</html>

附件是 2 个文件(一个 JSON 和一个 CSV ),其中包含我尝试使用的数据。 “resources”下的数据是dataArray中的当前数据。如何外部化这些数据?

最佳答案

如果要将外部数据加载到D3中。您有 2 个选择:

选项 A:单个文件(JSON 或 CSV 或 TSV)

d3.json("your.json", function (data) {
// stuff here
})

d3.csv("your.csv", function (data) {
// stuff here
})

d3.tsv("your.tvs", function (data) {
// stuff here
})

选项 B:多个文件(JSON、CSV 和 TSV)

queue()
.defer(d3.json, 'json_data.json')
.defer(d3.csv, 'csv_data.csv')
.defer(d3.tsv, 'tsv_data.tsv')
.await(makeGraph);

function makeGraph (json_data, csv_data, tsv_data, error) {
//your stuff here
}

要使用queue,您必须在 header 中包含脚本:

<script src="http://d3js.org/queue.v1.min.js"></script>

排队等待所有数据到达,然后执行该函数。

  • JSON:JavaScript 对象表示法
  • CSV:逗号分隔值
  • TSV:制表符分隔值

然后你的代码:

var width = 600
var height = 500
var emptyVar = 0
var dataArray = [0.35, 1.66, 3.04, 1.54, 3.45, 2.56, 2.29, 1.37];
var emptyData = [];
var widthScale = d3.scale.linear()
.domain([0, 5])
.range([0, width]);

var color = d3.scale.linear()
.domain([0, 5])
.range(["#000066", "#22abff"])

var axis = d3.svg.axis()
.ticks("10")
.scale(widthScale);

var canvas = d3.select("body")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(30, 0)");

queue()
.defer(d3.json, 'json_data.json')
.defer(d3.csv, 'csv_data.csv')
.await(makeGraph);

function makeGraph(json_data, csv_data, error) {
if (error) {
alert ("something went wrong!!");
}
var bars = canvas.selectAll("rect")
.data(your_data_from_json_or_csv)
.enter()
.append("rect")
.attr("width", emptyVar)
.attr("height", 50)
.attr("fill", function(d) {
return color(d)
})
.attr("y", function(d, i) {
return i * 55
})

canvas.append("g")
.attr("transform", "translate(0, 430)")
.attr("font-family", "Helvetica")
.attr("font-size", "15px")
.call(axis);

bars.transition()
.duration(1500)
.delay(200)
.attr("width", function(d) {
return widthScale(d);
})
}

关于javascript - 如何外部化我的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com