2013-04-15 10 views
14

Ho già fatto una domanda su d3 e mi hanno suggerito di usare una scala ordinale per risolvere i miei problemi. Effettivamente ha risolto i miei problemi, ma so di essere bloccato con un altro problema ...Linea D3, non è possibile modificare la quantità di zecche con una scala ordinale?

Si disegna perfettamente, ma il mio asse X è pieno di testo. Ad esempio, desidero: 1900 1904 1908 1912 ... ma ho ottenuto: 190119021903190419051906. Come potete vedere questo non è chiaro. (questo è solo un esempio, se ci fossero solo date in cui potrei usare un'altra scala). Ovunque guardassi parlano di axis.ticks (numero). Ma questo non funziona. Non succede niente e ho ancora lo stesso risultato. ho inciso un risultato da ottenere meno risultati sul asse x:

var str = []; 
    var i = 0; 
    while(i < data.length) { 
     str.push(data[i].age); 
     i=i+8; 
    } 
    x.domain(str); 

Ma se faccio questo si crea una linea casuale e non attira più perfettamente. Non so come risolvere questo .. E 'un semplice grafico a linee, niente di difficile, l'unica difficoltà (per me) è la scala ordinale ...

Spero che qualcuno possa darmi una mano.

Ecco come il mio xe asse x è definito:

var x = d3.scale.ordinal() 
    .rangeRoundBands([0, width-150],1); 

var xAxis = d3.svg.axis() 
    .scale(x) 
    .orient("bottom") 

senza il ciclo while (il brutto hack), ho appena avuto la seguente linea che definisce la x.domain:

x.domain(data.map(function(d) { return d.age; })); 

risposta

7

Dai un'occhiata allo the documentation for axes, in particolare la funzione ticks(). Puoi usarlo (o tickValues()) per controllare quanti (e quali) valori vuoi mostrare.

Se si lavora con le date, è possibile utilizzare uno time scale invece di quello ordinale. In particolare, ti permetterà di controllare le zecche in un modo più significativo, ad es. specificare che si desidera zecche ogni cinque anni.

+0

Grazie per la tua reazione, darò un'occhiata alla documentazione, ma come ho già detto, la funzione ticks() non ha funzionato .. Ad esempio ho fatto ticks(), ma erano ancora visibili tutte le zecche. E come ho detto, il 1900, 1901 è stato un esempio, se ci fossero solo date in effetti avrei usato la scala temporale ... –

+3

TickValues ​​() ha risolto il problema in effetti. L'ho provato, ma non ha funzionato .. Non so cosa ho sbagliato di allora, ma ora funziona. Grazie per la risposta veloce. –

Problemi correlati