D3.js에서 시간 척도를 사용할 때 x (i)에 대해 잘못된 값이 반환 됨

mdakovac

D3.js를 사용하여 간단한 차트를 만들 때이 오류가 발생했습니다.

var data =  {
    "Elektrotehnički fakultet Osijek": { "2008/09":1539, "2009/10":1678, "2010/11":1873, "2011/12":2231, "2012/13":2192, "2013/14":1841},
    "Fakultet elektrotehnike i računarstva Zagreb": { "2008/09":4795, "2009/10":4538, "2010/11":4320, "2011/12":4913, "2012/13":4634, "2013/14":3290},
    "Fakultet elektrotehnike strojarstva i brodogradnje Split": { "2008/09":2480, "2009/10":2685, "2010/11":2790, "2011/12":2769, "2012/13":2649, "2013/14":2633}
    }

var margin = {top: 50, bottom: 70, left:70, right: 30};
var width = 700 - margin.left - margin.right;
var height = 500 - margin.top - margin.bottom;


var timeFormat2 = d3.time.format('%Y');
function returnArray(){
        var a = [];
        var keys = Object.keys(data["Elektrotehnički fakultet Osijek"]);
        for(var i = 0; i < Object.keys(data["Elektrotehnički fakultet Osijek"]).length; i++){
            a.push(timeFormat2(new Date(keys[i].substring(0, keys[i].indexOf('/')))))
        }
        console.log(a);
        return a;
    }

var x = d3.time.scale()
    .domain(returnArray())
    .range([0, width/5, 2*width/5, 3*width/5, 4*width/5, 5*width/5]);

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

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickFormat(function(d, i) { return Object.keys(data["Elektrotehnički fakultet Osijek"])[i].replace(/_/g, ' '); });

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    .ticks(10);

var valueline = d3.svg.line()
    .x(function(d, i) { return x(i); })
    .y(function(d) { return y(d); });
var linechart = svg.append("path")
    .attr("class", "line")
    .attr("d", valueline(Object.values(data["Elektrotehnički fakultet Osijek"])))
    .style("stroke", "blue")
    .style("stroke-width", "2")
    .style("fill", "none")

x 축에 서수 스케일을 사용하면 valueline의 x (i) 함수가 svg 내부에있는 유효한 값을 반환하고 선 차트는 정상적으로 그려집니다. 하지만 시간 척도를 사용하면이 값은 유효한 값인 240960입니다.이 숫자를 다음과 같이 추가하면 :

var valueline = d3.svg.line()
    .x(function(d, i) { return x(i)+2409600; })
    .y(function(d) { return y(d); });

코드가 작동하고 차트가 다시 정상적으로 그려집니다. 이 이상한 값을 얻는 이유와 수정 방법은 무엇입니까?

시간 척도를 사용하는 경우 날짜 를 전달할 것으로 예상합니다 . 이 줄 :

.x(function(d, i) { return x(i); })

배열 인덱스 값 (예 0: 1,, 2...)을 전달합니다.

이 작업을 수행하려면 전달하는 데이터를 valueline개체의 배열 로 변경해야 하며 각 개체는 x 날짜와 y 값을 갖습니다.

다음은 적절한 날짜 구문 분석을 사용한 전체 코드 스 니펫 리팩터링입니다.

<!DOCTYPE html>
<html>

  <head>
    <script data-require="[email protected]" data-semver="3.5.17" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>
  </head>

  <body>
    <script>
      var data =  {
    "Elektrotehnički fakultet Osijek": { "2008/09":1539, "2009/10":1678, "2010/11":1873, "2011/12":2231, "2012/13":2192, "2013/14":1841},
    "Fakultet elektrotehnike i računarstva Zagreb": { "2008/09":4795, "2009/10":4538, "2010/11":4320, "2011/12":4913, "2012/13":4634, "2013/14":3290},
    "Fakultet elektrotehnike strojarstva i brodogradnje Split": { "2008/09":2480, "2009/10":2685, "2010/11":2790, "2011/12":2769, "2012/13":2649, "2013/14":2633}
    }

var margin = {top: 50, bottom: 70, left:70, right: 30};
var width = 700 - margin.left - margin.right;
var height = 500 - margin.top - margin.bottom;

var svg = d3.select('body')
  .append('svg')
  .attr('width', width)
  .attr('height', height);

var timeFormat2 = d3.time.format('%Y');

// this will end up being an array
// of objects with two properties, date and value
var properData = [];
for (key in data["Elektrotehnički fakultet Osijek"]){
  var value = data["Elektrotehnički fakultet Osijek"][key],
      date = timeFormat2.parse(key.split("/")[0]);
  properData.push({
    value: value,
    date: date
  })
}

var x = d3.time.scale()
    .domain(d3.extent(properData, function(d){ return d.date }))
    .range([0, width]);

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

var xAxis = d3.svg.axis()
    .scale(x)
    .orient("bottom")
    .tickFormat(function(d, i) { return Object.keys(data["Elektrotehnički fakultet Osijek"])[i].replace(/_/g, ' '); });

var yAxis = d3.svg.axis()
    .scale(y)
    .orient("left")
    .ticks(10);

var valueline = d3.svg.line()
    .x(function(d, i) { return x(d.date); })
    .y(function(d) { return y(d.value); });    
   
var linechart = svg.append("path")
    .attr("class", "line")
    .attr("d", valueline(properData))
    .style("stroke", "blue")
    .style("stroke-width", "2")
    .style("fill", "none")
    </script>
  </body>

</html>

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

2D 벡터에서 주변 좌표를 확인할 때 잘못된 값이 반환 됨

분류에서Dev

접미사 표기법-스택 팝 및 푸시 도움말, mod 또는 pow 연산자에 대해 잘못된 반환 값이 반환 됨

분류에서Dev

If 조건 PLSQL에 대해 잘못된 값이 반환 됨

분류에서Dev

d3.mouse 오프셋에 의해 잘못된 값이 반환 됨

분류에서Dev

날짜를 Epoch 초로 변환 할 때 순간 시간대에서 잘못된 값 가져 오기

분류에서Dev

x 축에서 시간 척도를 사용하는 D3 산점도-Firefox에서 작동하지 않음

분류에서Dev

ng-show를 사용할 때 ui-bootstrap 탭에 잘못된 탭 내용이 표시됨

분류에서Dev

Mozilla Firefox에서 moment.js를 사용할 때 잘못된 날짜가 표시됨

분류에서Dev

PuTTY를 사용할 때 Linux 터미널에서 색상이 잘못 표시됨

분류에서Dev

자식 Reactjs에서 부모 함수를 호출 할 때 잘못된 값이 표시됨

분류에서Dev

'order by'에서 자리 표시자를 사용할 때 Python Sqlite3 실행이 잘못됨

분류에서Dev

strptime 시간 변환-연도와 월에 대한 잘못된 값

분류에서Dev

MySqlCommandBuilder를 사용할 때 DataGridview에서 시간 값을 업데이트 할 때 날짜 값이 변경됨

분류에서Dev

2D 배열에 요소를 추가 할 때 잘못된 출력이 표시됨

분류에서Dev

파이프에서 읽을 때 잘못된 데이터가 반환 됨

분류에서Dev

간단한 수학 문제에 대해 잘못된 답이 표시됨 C ++

분류에서Dev

NHibernate 4에서 Guid를 기본 키로 사용할 때 잘못된 Select 문이 생성됨

분류에서Dev

Java의 HDFS에서 CopyFromLocalFile을 시도 할 때 "잘못된 FS… 예상 됨 : file : ///"

분류에서Dev

Qt-해시 테이블에 잘못된 값이 포함됨

분류에서Dev

C 프로그램에서 x86 어셈블리 함수를 호출 할 때 잘못된 행렬 값이 검색 됨

분류에서Dev

증강 현실에 사용할 때 센서의 잘못된 x 값

분류에서Dev

R에서 해시 맵에 대한 값을 설정하려고 할 때 환경 하위 할당에 대한 잘못된 인수

분류에서Dev

인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

분류에서Dev

Entity Framework가 LEFT JOIN 문을 사용하여보기에 대해 잘못된 데이터를 반환합니다.

분류에서Dev

express.js에서 express.static (__ dirname) 함수를 사용할 때 잘못된 HTML 페이지로 리디렉션 됨

분류에서Dev

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

분류에서Dev

YouTube에 비디오를 업로드하려고 할 때 "잘못된 멀티 파트 본문"이 표시됨

분류에서Dev

Gnuplot이 시계열도에 대해 잘못된 시간을 표시 함

분류에서Dev

PHAsset은 PHImageManager를 사용할 때 UIImage에 대해 nil 값을 반환합니다.

Related 관련 기사

  1. 1

    2D 벡터에서 주변 좌표를 확인할 때 잘못된 값이 반환 됨

  2. 2

    접미사 표기법-스택 팝 및 푸시 도움말, mod 또는 pow 연산자에 대해 잘못된 반환 값이 반환 됨

  3. 3

    If 조건 PLSQL에 대해 잘못된 값이 반환 됨

  4. 4

    d3.mouse 오프셋에 의해 잘못된 값이 반환 됨

  5. 5

    날짜를 Epoch 초로 변환 할 때 순간 시간대에서 잘못된 값 가져 오기

  6. 6

    x 축에서 시간 척도를 사용하는 D3 산점도-Firefox에서 작동하지 않음

  7. 7

    ng-show를 사용할 때 ui-bootstrap 탭에 잘못된 탭 내용이 표시됨

  8. 8

    Mozilla Firefox에서 moment.js를 사용할 때 잘못된 날짜가 표시됨

  9. 9

    PuTTY를 사용할 때 Linux 터미널에서 색상이 잘못 표시됨

  10. 10

    자식 Reactjs에서 부모 함수를 호출 할 때 잘못된 값이 표시됨

  11. 11

    'order by'에서 자리 표시자를 사용할 때 Python Sqlite3 실행이 잘못됨

  12. 12

    strptime 시간 변환-연도와 월에 대한 잘못된 값

  13. 13

    MySqlCommandBuilder를 사용할 때 DataGridview에서 시간 값을 업데이트 할 때 날짜 값이 변경됨

  14. 14

    2D 배열에 요소를 추가 할 때 잘못된 출력이 표시됨

  15. 15

    파이프에서 읽을 때 잘못된 데이터가 반환 됨

  16. 16

    간단한 수학 문제에 대해 잘못된 답이 표시됨 C ++

  17. 17

    NHibernate 4에서 Guid를 기본 키로 사용할 때 잘못된 Select 문이 생성됨

  18. 18

    Java의 HDFS에서 CopyFromLocalFile을 시도 할 때 "잘못된 FS… 예상 됨 : file : ///"

  19. 19

    Qt-해시 테이블에 잘못된 값이 포함됨

  20. 20

    C 프로그램에서 x86 어셈블리 함수를 호출 할 때 잘못된 행렬 값이 검색 됨

  21. 21

    증강 현실에 사용할 때 센서의 잘못된 x 값

  22. 22

    R에서 해시 맵에 대한 값을 설정하려고 할 때 환경 하위 할당에 대한 잘못된 인수

  23. 23

    인증 사용자 데이터를 표시하려고 할 때 foreach ()에 대해 잘못된 인수가 제공되었습니다.

  24. 24

    Entity Framework가 LEFT JOIN 문을 사용하여보기에 대해 잘못된 데이터를 반환합니다.

  25. 25

    express.js에서 express.static (__ dirname) 함수를 사용할 때 잘못된 HTML 페이지로 리디렉션 됨

  26. 26

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

  27. 27

    YouTube에 비디오를 업로드하려고 할 때 "잘못된 멀티 파트 본문"이 표시됨

  28. 28

    Gnuplot이 시계열도에 대해 잘못된 시간을 표시 함

  29. 29

    PHAsset은 PHImageManager를 사용할 때 UIImage에 대해 nil 값을 반환합니다.

뜨겁다태그

보관