简体   繁体   English

D3 - 来自条形图示例的线图

[英]D3 - line plot from bar chart example

I am trying to modify below code from this example我正在尝试修改此示例中的以下代码

https://enappd.com/blog/adding-charts-in-ionic-4-apps-and-pwa-part-2/54/ https://enappd.com/blog/adding-charts-in-ionic-4-apps-and-pwa-part-2/54/

to a line plot or connected scatter plot (preferred).到线图或连接散点图(首选)。 How?如何?

Nearly all simple D3 examples I find a bar charts or have different syntax since they read data from a cvs and not locally in the example above.几乎所有简单的 D3 示例我都找到了条形图或具有不同的语法,因为它们从cvs读取数据,而不是在上面的示例中本地读取数据。 D3 is a bit cryptic for me so far.到目前为止,D3 对我来说有点神秘。

    this.g.selectAll('.bar')
      .data(this.barData)
      .enter()
      .append('rect')
      .attr('class', 'bar')
      .attr('fill', 'rgb(34, 167, 240)')
      .attr('x', (d) => this.x(d.season))
      .attr('y', (d) => this.y(d.viewers))
      .attr('width', this.x.bandwidth())
      .attr('height', (d) => this.height - this.y(d.viewers));

I believe this is a line plot, not sure if it meets your requirements, let me know:我相信这是一个线图,不确定它是否符合您的要求,请告诉我:

 // set the dimensions and margins of the graph var margin = {top: 10, right: 30, bottom: 30, left: 60}, width = 460 - margin.left - margin.right, height = 400 - margin.top - margin.bottom; // append the svg object to the body of the page var svg = d3.select("#my_dataviz") .append("svg") .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) .append("g") .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); //d3.csv("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/2_TwoNum.csv", function(data) { //console.log(data); //}); var data = [ { x: 1, y: 2500000 }, { x: 2, y: 3800000 }, { x: 3, y: 5000000 }, { x: 4, y: 6900000 }, { x: 5, y: 6900000 }, { x: 6, y: 7500000 }, { x: 7, y: 10000000 }, { x: 8, y: 17000000 } ]; // Add X axis var x = d3.scaleLinear() .domain([0, 10]) .range([ 0, width ]); svg.append("g") .attr("transform", "translate(0," + height + ")") .call(d3.axisBottom(x)); // Add Y axis var y = d3.scaleLinear() .domain([0, 20000000]) .range([ height, 0]); svg.append("g") .call(d3.axisLeft(y)); // Add dots - scatter plot //svg.append('g') // .selectAll("dot") // .data(data) // .enter() // .append("circle") // .attr("cx", function (d) { return x(dx); } ) // .attr("cy", function (d) { return y(dy); } ) // .attr("r", 1.5) // .style("fill", "#69b3a2") svg.append("path") .datum(data) .attr("fill", "none") .attr("stroke", "steelblue") .attr("stroke-width", 1.5) .attr("d", d3.line() .x(function(d) { return x(dx) }) .y(function(d) { return y(dy) }) ) svg.append("text") .attr("transform", "translate(" + (width/2) + " ," + (height + margin.top + 20) + ")") .style("text-anchor", "middle") .text("season"); // Add the y Axis svg.append("g") .call(d3.axisLeft(y)); // text label for the y axis svg.append("text") .attr("transform", "rotate(-90)") .attr("y", 0 - margin.left) .attr("x",0 - (height / 2)) .attr("dy", "1em") .style("text-anchor", "middle") .text("viewers"); </script>
 <script src="https://d3js.org/d3.v4.js"></script> <!-- Create a div where the graph will take place --> <div id="my_dataviz"></div>

Important as for reading from CSV, it's relatively simple to grasp how to get rid of it in the examples.对于从 CSV 读取很重要,在示例中掌握如何摆脱它相对简单。 Here's how you could load data from csv:以下是从 csv 加载数据的方法:

d3.csv("https://.../master/Example_dataset/2_TwoNum.csv", function(data) {
//do something with data here
});

So, basically you do the drawing within the callback (once you've got the data, right?).所以,基本上你在回调中进行绘图(一旦你得到了数据,对吧?)。 If you know data when writing the script (like in your example), you simply assign the data and use it in d3 transformations.如果您在编写脚本时知道数据(如您的示例中所示),您只需分配数据并在d3转换中使用它。 Here's a great example of scatter plot drawing in d3 .这是在 d3 中绘制散点图的一个很好的例子 All I've done is simply got rid of the callback and assign your data + re-scale the x and y axes.我所做的只是摆脱了回调并分配您的数据 + 重新缩放 x 和 y 轴。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM