html 양식의 데이터로 d3.js 차트를 다시 그리는 방법은 무엇입니까?

패트릭

저는 24 시간 동안 알람 분포가있는 그래프를 생성하는 작은 웹 페이지를 작성했습니다. 알람 카운트는이 기간 동안 몇 개의 알람이 전송 될지 결정하는 변수입니다.

그 후 입력 필드에 알람 카운트 변수가있는 작은 양식을 작성했습니다.

<input id="alarm_count_input" type="number"/>

이제 d3.js사용자가 양식 / 입력 필드와 함께 제출 한 알람 수를 사용하여 페이지를 다시로드하지 않고 그래프 를 다시 그릴 수 있기를 원합니다 .

JsFiddle : http://jsfiddle.net/L42LU/

코드 :

<script type="text/javascript">
$(function(){

........

function createDataForD3( alarm_cnt, array) {
    var data = [];
    for(var i = 0, n=array.length; i< n; i++)
    {
        data.push({ "hour": i, 
                    "alarms": getRatioForHour(i, array) * alarm_cnt
                    });
    }
    return data;
}

var schedule = [1, 1, 1, 1, 4, 1, 1, 3, 2, 3, 4, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1];
var alarm_count = 1000;

var margin = {top: 20, right: 20, bottom: 30, left: 50},
    width = 0.85 * document.width - margin.left - margin.right,
    height = 0.9 * document.height - margin.top - margin.bottom;

var x_extent = [-0.5, 23.5];
var y_extent = [0, Math.round(
                    getMaxAlarmCountForHourInArray(alarm_count, schedule)[1] * 1.2 ) ];

var x_scale = d3.scale.linear()
    .range([0, width])
    .domain(x_extent);

var y_scale = d3.scale.linear()
    .range([ height, 0])
    .domain(y_extent);


var data = createDataForD3( alarm_count , schedule);

var xAxis = d3.svg.axis()
    .scale(x_scale)
    .orient("bottom")
    .ticks(24);

var yAxis = d3.svg.axis()
    .scale(y_scale)
    .orient("left");

var line = d3.svg.line()
    .x(function(d) { return x_scale(d.hour) ; })
    .y(function(d) { return y_scale( Math.round( d.alarms)) ; });

var svg = d3.select("body")
    .append("svg")
        .attr("class", "chart")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.bottom)
    .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")");


    svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .call(xAxis)
    .append("text")
        .attr("y", margin.bottom)
        .attr("x", (width) / 2)
        .text("Hour");

    svg.append("g")
        .classed("x grid ", true)
        .attr("transform", "translate(0,"+height+")")
        .call(xAxis
          .tickSize(-height,0,0)
          .tickFormat("")
    );

  svg.append("g")
      .attr("class", "y axis")
      .call(yAxis)
    .append("text")
      .attr("transform", "rotate(-90)")
      .attr("y", 8)
      .attr("x", -20)
      .attr("dy", ".71em")
      .style("text-anchor", "end")
      .text("Alarms per hour");

    svg.append("g")
        .classed("y grid", true)
        .call(yAxis
            .tickSize(-width,0,0)
            .tickFormat("")
    )

    svg.append("path")
      .datum(data)
      .attr("class", "line")
      .attr("d", line);

    svg.append("g")
      .selectAll("circle")
        .data(data)
      .enter()
      .append("circle");

    d3.selectAll("circle")
        .attr("cx", function(d){ return x_scale(d.hour); })
        .attr("cy", function(d){ return y_scale(d.alarms); })
        .attr("r", 6);

    $("#alarm_count_input").val(alarm_count);
});
</script>
<form id="form1" role="form" onSubmit="return false;">
    <div class=form-group">
        <label for="alarm_count_input" >Alarm count</label><br>
        <input id="alarm_count_input" class="form-control" type="number" placeholder="Alarm count" min="0" max="999999" step="1" />
    </div>
</form>
</body>
Yogesh

여기 에 업데이트 된 코드가있는 jsfiddle이 있습니다. 알람 카운트에 의존하는 코드의 모든 부분을 알람 카운트 값이 변경 될 때마다 호출되는 별도의 함수로 옮겼습니다.

function render(){    
    yAxis = yAxis.tickFormat(d3.format(","));
    y_extent = [0, Math.round(
                    getMaxAlarmCountForHourInArray(alarm_count, schedule)[1] * 1.2 ) ];

    y_scale.domain(y_extent);

    var data = createDataForD3( alarm_count , schedule);


    svg.select("g.y.axis").call(yAxis);

    gridAxis.tickFormat("");
    svg.select("g.y.grid").call(gridAxis);

    var lineData = svg.selectAll(".line").data([data]);

    lineData.enter().append("path")
      .attr("d", line(data))
    .attr("class", "line");

    lineData.exit().remove();

    var svgData = svg.selectAll("circle")
        .data(data);

     var svgEnter = svgData.enter().append("circle")
        .attr("cx", function(d){ return x_scale(d.hour); })
        .attr("cy", function(d){ return y_scale(d.alarms); })
        .attr("r", 6);

    svgData.exit().remove();

    }
render();

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

html 양식의 데이터로 d3.js 차트를 다시 그리는 방법은 무엇입니까?

분류에서Dev

React JS에서 그리드 방식으로 데이터를 표시하는 방법은 무엇입니까?

분류에서Dev

onchange 슬라이더 이벤트로 d3 차트의 데이터를 업데이트하는 방법은 무엇입니까?

분류에서Dev

이 D3 가로 막대 차트를 작동시키는 방법은 무엇입니까?

분류에서Dev

JS 입력 양식의 데이터를 텍스트에 저장하는 방법은 무엇입니까?

분류에서Dev

Android에서 웹 API로 다중 파트 양식 데이터를 게시하는 방법은 무엇입니까?

분류에서Dev

양식이 Angular의 지시문에있을 때 양식 데이터를 얻는 방법은 무엇입니까?

분류에서Dev

다른 종류와 수의 HTML 양식 데이터를 데이터베이스에 저장하는 방법은 무엇입니까?

분류에서Dev

D3.js에서 마우스 오버시 원형 차트의 다른 세그먼트를 변경하는 방법은 무엇입니까?

분류에서Dev

chart.js를 사용하여 mysql의 데이터를 원형 차트로 표시하는 방법은 무엇입니까?

분류에서Dev

불규칙한 데이터 구조로 React (바닐라)에서 D3의 시간 척도를 사용하는 방법은 무엇입니까?

분류에서Dev

데이터 렌더링을 위해 dc.js를 d3 수평선 차트와 통합하는 방법은 무엇입니까?

분류에서Dev

JavaScript를 사용하여 HTML 양식에서 Google 스프레드 시트로 데이터를 보내는 방법은 무엇입니까?

분류에서Dev

d3.js를 사용하여 프로그래밍 방식으로 드래그 이벤트를 트리거하는 방법은 무엇입니까?

분류에서Dev

WordPress의 wp_mail 함수에 HTML 양식 데이터를 보내는 방법은 무엇입니까?

분류에서Dev

Stata의 한 차트에서 stcurve로 다른 그래프를 그리는 방법은 무엇입니까?

분류에서Dev

d3 다중 선 차트에서 tsv 파일 대신 json 데이터를 사용하는 방법은 무엇입니까?

분류에서Dev

Django에서 양식의 임시 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

분류에서Dev

Node.js를 사용하여 json 파일에서 데이터를 읽고 읽은 데이터를 html로 표시하는 방법은 무엇입니까?

분류에서Dev

다중 파트 양식 데이터에서 Node JS 미들웨어의 요청 본문을 얻는 방법은 무엇입니까?

분류에서Dev

acumatica의 마스터 세부 양식에서 세부 양식이있는 그리드를 표시하는 방법은 무엇입니까?

분류에서Dev

Django. 페이지를 다시로드 한 후 양식 필드의 데이터를 보존하는 방법은 무엇입니까?

분류에서Dev

Excel VBA : 다른 시트의 독점 범위로 데이터를 푸시하는 방법은 무엇입니까?

분류에서Dev

R의 시차로 데이터를 그룹화하는 방법은 무엇입니까?

분류에서Dev

D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

분류에서Dev

D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

분류에서Dev

D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

분류에서Dev

d3의 json에서 데이터를 요청하는 방법은 무엇입니까?

분류에서Dev

강제 레이아웃 그래프의 데이터를 동적으로 변경하는 방법은 무엇입니까? D3

Related 관련 기사

  1. 1

    html 양식의 데이터로 d3.js 차트를 다시 그리는 방법은 무엇입니까?

  2. 2

    React JS에서 그리드 방식으로 데이터를 표시하는 방법은 무엇입니까?

  3. 3

    onchange 슬라이더 이벤트로 d3 차트의 데이터를 업데이트하는 방법은 무엇입니까?

  4. 4

    이 D3 가로 막대 차트를 작동시키는 방법은 무엇입니까?

  5. 5

    JS 입력 양식의 데이터를 텍스트에 저장하는 방법은 무엇입니까?

  6. 6

    Android에서 웹 API로 다중 파트 양식 데이터를 게시하는 방법은 무엇입니까?

  7. 7

    양식이 Angular의 지시문에있을 때 양식 데이터를 얻는 방법은 무엇입니까?

  8. 8

    다른 종류와 수의 HTML 양식 데이터를 데이터베이스에 저장하는 방법은 무엇입니까?

  9. 9

    D3.js에서 마우스 오버시 원형 차트의 다른 세그먼트를 변경하는 방법은 무엇입니까?

  10. 10

    chart.js를 사용하여 mysql의 데이터를 원형 차트로 표시하는 방법은 무엇입니까?

  11. 11

    불규칙한 데이터 구조로 React (바닐라)에서 D3의 시간 척도를 사용하는 방법은 무엇입니까?

  12. 12

    데이터 렌더링을 위해 dc.js를 d3 수평선 차트와 통합하는 방법은 무엇입니까?

  13. 13

    JavaScript를 사용하여 HTML 양식에서 Google 스프레드 시트로 데이터를 보내는 방법은 무엇입니까?

  14. 14

    d3.js를 사용하여 프로그래밍 방식으로 드래그 이벤트를 트리거하는 방법은 무엇입니까?

  15. 15

    WordPress의 wp_mail 함수에 HTML 양식 데이터를 보내는 방법은 무엇입니까?

  16. 16

    Stata의 한 차트에서 stcurve로 다른 그래프를 그리는 방법은 무엇입니까?

  17. 17

    d3 다중 선 차트에서 tsv 파일 대신 json 데이터를 사용하는 방법은 무엇입니까?

  18. 18

    Django에서 양식의 임시 데이터를 저장하는 가장 좋은 방법은 무엇입니까?

  19. 19

    Node.js를 사용하여 json 파일에서 데이터를 읽고 읽은 데이터를 html로 표시하는 방법은 무엇입니까?

  20. 20

    다중 파트 양식 데이터에서 Node JS 미들웨어의 요청 본문을 얻는 방법은 무엇입니까?

  21. 21

    acumatica의 마스터 세부 양식에서 세부 양식이있는 그리드를 표시하는 방법은 무엇입니까?

  22. 22

    Django. 페이지를 다시로드 한 후 양식 필드의 데이터를 보존하는 방법은 무엇입니까?

  23. 23

    Excel VBA : 다른 시트의 독점 범위로 데이터를 푸시하는 방법은 무엇입니까?

  24. 24

    R의 시차로 데이터를 그룹화하는 방법은 무엇입니까?

  25. 25

    D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

  26. 26

    D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

  27. 27

    D3의 데이터에 따라 요소를 생성하는 방법은 무엇입니까?

  28. 28

    d3의 json에서 데이터를 요청하는 방법은 무엇입니까?

  29. 29

    강제 레이아웃 그래프의 데이터를 동적으로 변경하는 방법은 무엇입니까? D3

뜨겁다태그

보관