2012-08-27 15 views
5

Oto mój demo (łącze stałe, może zająć sekundę, aby załadować).Jak utworzyć histogram przy użyciu danych d3.js i crossfiltra?

Mam kilka problemów z nim:

  1. Klawisz crossfilter nie odzwierciedla górną granicę. Dlatego na osi X brakuje jednego kroku.

    enter image description here

    udało mi się go naprawić poprzez uzyskanie jeden rozmiar grupa etap (group.all()[1] - group.all()[0]), a następnie dodanie go do d3.extent(group.all())[1]. Ponieważ jest to brudna poprawka, nie włączałem tego do wersji demonstracyjnej (może to wynikać z luki danych). Jaki jest mniej brudny sposób na uzyskanie rozmiaru kroku grupy/naprawienie osi X?

  2. Występują nierównomierne odstępy między prętami. Nie mogę wymyślić, jak naprawić niezgodność x.scale z różnymi zestawami danych.

    enter image description here

    chcę pasek szerokości automatycznie dostosować do dostępnej szerokości wykresu. Dlatego też obliczyć optymalną szerokość bar, a następnie (w razie potrzeby) rozmiaru wykresu sam:

    bar_width = math.round(graph_width/data_length); 
    graph_width = bar_width*data_length; 
    

    W tych warunkach nie ma możliwości x.scale może powrócić nierówne danych dla każdej wartości klucza, a mimo to robi. Nie ma magii; Po prostu coś przeoczam. Ale co to jest?

    Kiedy x.scalejest zawiedli następnie odjęcie bar_width z graph_width przed ustawieniem zakresu x.scale rozwiązuje ten problem. Chociaż nie potrafię wykryć warunku wykrycia, kiedy x.scale nie działa zgodnie z oczekiwaniami.

Odpowiedz

2

Spędziłem dużo czasu próbując znaleźć właściwą drogę do tego. Jednak skończyło się na zastosowaniu prostej matematyki do odgadnięcia górnej granicy danych. Istnieje wiele problemów, które jeszcze nie zostały rozwiązane, na przykład, jak wizualnie radzić sobie z ekstremami.

enter image description here

Moja próba opracowania wielokrotnego użytku bibliotekę histogramu jest dostępny on github.

+0

To jest świetne! Czy mimo wszystko domyślnie jest to wyróżnione? – by0

+0

Nie dotykałem tego przez długi czas. Jeśli prześlesz zgłoszenie problemu/funkcji na GitHub, przyjrzę mu się. – Gajus

Powiązane problemy