【发布时间】:2019-12-26 20:33:46
【问题描述】:
我正在尝试集成图表库 d3.js,我有其他图表库的经验,但我面临使用 d3.js 库显示折线图的问题,我分享了 MVC c# 项目的以下代码,我不知道'不知道为什么图表不呈现,谁能帮我解决这个问题,代码中的问题是什么。
以下是图表渲染的图像,我的图表是用x轴和y轴点渲染的,但没有画线,代码到底有什么问题。
Chart.cshtml
@{
ViewBag.Title = "Index";
Layout = null;
}
@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>@ViewBag.Title - </h1>
</hgroup>
</div>
</section>
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.14.2/d3.js" charset="utf-8"></script>
<style type="text/css">
#chart text {
fill: white;
font: 10px sans-serif;
text-anchor: end;
}
.axis text {
font: 10px sans-serif;
}
.axis path, .axis line {
fill: none;
stroke: #fff;
shape-rendering: crispEdges;
}
body {
background: #1a1a1a;
color: #eaeaea;
padding: 10px;
}
path {
stroke: steelblue;
stroke-width: 2;
fill: none;
}
</style>
<div id="chart" height="120" width="120"></div>
<script type="text/javascript">
var salesData;
$(document).ready(function () {
Plot();
});
function Plot() {
var yearData;
var salesData;
var data =
[
{ 'Year': '2008', 'Sale': 2000 },
{ 'Year': '2009', 'Sale': 4000 },
{ 'Year': '2015', 'Sale': 5000 }
]
yearData = GetYears(data)
salesData = GetSales(data)
var margin = { top: 20, right: 30, bottom: 30, left: 40 },
width = 1000 - margin.left - margin.right,
height = 500 - margin.top - margin.bottom;
var chart = d3.select("#chart")
.append("svg") //append svg element inside #chart
.attr("width", width + (2 * margin.left) + margin.right) //set width
.attr("height", height + margin.top + margin.bottom); //set height
var x = d3.scale.ordinal().domain(yearData).rangePoints([margin.left, width]);
var y = d3.scale.linear().domain(salesData).range([height, 0]);
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom").ticks(data.Year); //orient bottom because x-axis will appear below the bars
var yAxis = d3.svg.axis()
.scale(yes)
.orient("left").ticks(10);
// Define the line
var valueline = d3.svg.line()
.x(function (d) { return x(d.year); })
.y(function (d) { return y(d.Sale); });
chart.append("g")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
chart.append("g")
.attr("class", "y axis")
.attr("transform", "translate(" + margin.left + ",0)")
.call(yAxis)
.append("text")
.attr("y", 6)
.text("Sales Data");
// Add the valueline path.
chart.append("path")
//.attr("class", "line")
.attr("d", valueline(data));
}
function GetYears(data) {
var result = [];
for (var i in data)
result.push(data[i].Year);
return result;
}
function GetSales(data) {
var result = [];
var max = 0.0;
result.push(max);
for (var i in data) {
if (max < data[i].Sale) {
max = data[i].Sale
}
}
result.push(max + 50);
return result;
}
</script>
【问题讨论】:
-
作为类型的行的访问器。需要
.x(function (d) { return x(d.Year); }) -
+
GetYears返回 3 个元素,但GetSales返回 2 个元素。
标签: c# asp.net-mvc d3.js charts