2012-11-02 8 views
6

Bardzo lubię this graph i jego funkcjonalność i jest idealny do tego, co chcę/potrzebuję. Jedyną rzeczą, którą muszę zmienić, jest to, że potrzebuję tego, aby umożliwić dane porządkowe na osi Y i nie wydaje mi się, żeby to działało (jestem początkującym).Szczotkowanie danych porządkowych nie działa

Kiedy zmienić skalę y z liniowej na porządkowej:

yscale[k] = d3.scale.linear() .domain(d3.extent(data, function(d) { return +d[k]; })) .range([h, 0]));

do

yscale[k] = d3.scale.ordinal().rangePoints([h, 0]), 
     yscale[k].domain(data.map(function(d) { return d[k]; }))) 

Szczotkowanie nadal pokazuje się i pracuje sam, ale nie filtrować pozostawiając wybrane linie. Żadne linie nie pojawiają się, dopóki nie przesunę go na sam szczyt osi, wtedy wszystkie lub w większości wszystkie pojawią się. Kiedy przejrzałem kod z firebugiem, wyglądało to tak, jakby nie było linii, które były w obszarze pędzla, ale wszystkie (?) ... i nie mogę się zorientować. :(

Jeśli ktoś mógłby pomóc z tym (zwłaszcza wszystkie miejsca, muszę zmienić i jak), chciałbym uzyskać tej pracy i dowiedzieć się, co robię źle: - \

Odpowiedz

5

Szczotkowanie liczbę porządkową oś zwraca pikseli podczas szczotkowania oś ilościową zwraca domeny.

https://github.com/mbostock/d3/wiki/SVG-Controls#wiki-brush_x

skala jest zazwyczaj zdefiniowany jako skali ilościową, przy czym stopień znajduje się w przestrzeni danych zSkaladomeny; jednakże może on być zdefiniowany jako skala porządkowa, gdzie zakres jest w przestrzeni pikseli od zakresu skali w zakresie od .

Domyślam się, że trzeba popracować wstecz i przetłumaczyć piksele na wartości domeny. Znalazłem to pytanie, ponieważ staram się zrobić to samo. Jeśli to rozwiążę, dam ci znać.

EDYCJA: Oto wspaniały przykład, aby zacząć.

http://philau.willbowman.com/2012/digitalInnovation/DevelopmentReferences/LIBS/d3JS/examples/brush/brush-ordinal.html

function brushmove() { 
    var s = d3.event.target.extent(); 
    symbol.classed("selected", function(d) { return s[0] <= (d = x(d)) && d <= s[1]; }); 
} 

Łapie zakres wyboru (w pikselach), a następnie wybiera wszystkie elementy serii i określa, czy leżą one w stopniu. Możesz filtrować elementy na podstawie tego i zwracać klucze danych lub co dodać do filtrów.

+0

Hej dziękuję, już widziałem ten przykład, ale być może nie patrzę na to wystarczająco uważnie :). Przyjrzę się bliżej mojemu kodowi i zobaczę, jak mogę przetłumaczyć piksele na wartości domeny. W tej chwili nie mam pojęcia. ha ha. Naprawdę doceniam aktualizację, jeśli sprawisz, że działa. :) –

1

Jest przykładem skali porządkowej z szczotkowanie tutaj:

http://bl.ocks.org/chrisbrich/4173587

Podstawowym założeniem jest, jak sugeruje @gumballhead, jesteś odpowiedzialny za wystające wartości pikseli z powrotem na domenie wejściowej. Odpowiedni fragment z przykładu to:

brushed = function(){var selected = yScale.domain().filter(function(d){return (brush.extent()[0] <= yScale(d)) && (yScale(d) <= brush.extent()[1])});      
          d3.select(".selected").text(selected.join(","));} 
Powiązane problemy