如下代码,折线无法绘制出来,猜测可能是折线生成器那里的问题,请教大家
<div id="container"></div>
<script>
const width = 928;
const height = 500;
const marginTop = 20;
const marginRight = 30;
const marginBottom = 30;
const marginLeft = 40;
let data=d3.csv("aapl.csv") .then(function(data) {
console.log(data);
// Create the SVG container.
const svg = d3.select("#container")
.append("svg")
.attr("width", width)
.attr("height", height)
.attr("viewBox", [0, 0, width, height])
.attr("style", "max-width: 100%; height: auto; height: intrinsic;");
const x = d3.scaleUtc([new Date('2007-04-23' ),new Date('2012-05-01')], [marginLeft, width - marginRight]);
const y = d3.scaleLinear([0, d3.max(data, d => d.close)], [height - marginBottom, marginTop]);
// Add the x-axis.
svg.append("g")
.attr("transform", `translate(0,${height - marginBottom})`)
.call(d3.axisBottom(x).ticks(width / 80).tickSizeOuter(0));
// Add the y-axis, remove the domain line, add grid lines and a label.
svg.append("g")
.attr("transform", `translate(${marginLeft},0)`)
.call(d3.axisLeft(y).ticks(height / 40))
.call(g => g.select(".domain").remove())
.call(g => g.selectAll(".tick line").clone()
.attr("x2", width - marginLeft - marginRight)
.attr("stroke-opacity", 0.1))
.call(g => g.append("text")
.attr("x", -marginLeft)
.attr("y", 10)
.attr("fill", "currentColor")
.attr("text-anchor", "start")
.text("↑ Daily close ($)"));
const line = d3.line()
.x(d => x(d.date))
.y(d => y(d.close));
// Append a path for the line.
svg.append("path")
.attr("fill", "none")
.attr("stroke", "steelblue")
.attr("stroke-width", 1.5)
.attr("d", line(data));
})
</script>
【以下回答由 GPT 生成】
根据提供的代码,可以看到绘制折线图的逻辑。但是在其中有一个问题,即数据获取部分。代码中使用了d3.csv来获取数据,但是在vue.js中,直接在script标签中使用d3.csv是行不通的。所以需要使用其他方式获取数据。
<script>
const width = 928;
const height = 500;
const marginTop = 20;
const marginRight = 30;
const marginBottom = 30;
const marginLeft = 40;
new Vue({
el: '#container',
mounted() {
// 使用axios或fetch等方式获取数据
axios.get("aapl.csv").then(response => {
const data = d3.csvParse(response.data);
console.log(data);
// Create the SVG container.
const svg = d3.select("#container")
.append("svg")
.attr("width", width)
.attr("height", height)
.attr("viewBox", [0, 0, width, height])
.attr("style", "max-width: 100%; height: auto; height: intrinsic;");
const x = d3.scaleUtc(['2007-04-23','2012-05-01'], [marginLeft, width - marginRight]);
const y = d3.scaleLinear([0, d3.max(data, d => d.close)], [height - marginBottom, marginTop]);
// Add the x-axis.
svg.append("g")
.attr("transform", `translate(0,${height - marginBottom})`)
.call(d3.axisBottom(x));
}).catch(error => {
console.log(error);
});
}
});
</script>
<script>
const width = 928;
const height = 500;
const marginTop = 20;
const marginRight = 30;
const marginBottom = 30;
const marginLeft = 40;
// 使用axios或fetch等方式获取数据
axios.get("aapl.csv").then(response => {
const data = d3.csvParse(response.data);
console.log(data);
// Create the SVG container.
const svg = d3.select("#container")
.append("svg")
.attr("width", width)
.attr("height", height)
.attr("viewBox", [0, 0, width, height])
.attr("style", "max-width: 100%; height: auto; height: intrinsic;");
const x = d3.scaleUtc(['2007-04-23','2012-05-01'], [marginLeft, width - marginRight]);
const y = d3.scaleLinear([0, d3.max(data, d => d.close)], [height - marginBottom, marginTop]);
// Add the x-axis.
svg.append("g")
.attr("transform", `translate(0,${height - marginBottom})`)
.call(d3.axisBottom(x));
}).catch(error => {
console.log(error);
});
</script>
使用以上解决方案获取数据并绘制折线图,即可在页面中正确显示出折线图。请确保文件路径的正确性,并根据具体情况进行相应的调整。
【相关推荐】