Recentemente ho iniziato a utilizzare grafici NVD3 e mi piace avere l'opzione di zoom come Highcharts. È possibile?È possibile avere l'opzione di zoom nei grafici NVD3 come in Highcharts?
8
A
risposta
5
C'è un esempio di "Grafico a linee con View Finder" che utilizza nv.models.lineWithFocusChart()
. Questo tipo di grafico mette in mostra un ulteriore "mini mappa" sotto il grafico principale che è possibile utilizzare per ingrandire e scorrere la carta:
1
Si potrebbe applicare questa funzione per il grafico nvd3. Non produce una finestra trascinabile per agevolare lo zoom come in Highcharts ma consente lo zoom con il mouse come mostrato qui: pan+zoom example. Dovrai rimuovere le transizioni/i ritardi da nvd3 per ottenere uno zoom fluido. Per ora, potrebbe essere necessario farlo manualmente modificando il file sorgente nvd3. C'è una discussione su questo here.
Questo è un jsfiddle.
function addZoom(options) {
// scaleExtent
var scaleExtent = 10;
// parameters
var yAxis = options.yAxis;
var xAxis = options.xAxis;
var xDomain = options.xDomain || xAxis.scale().domain;
var yDomain = options.yDomain || yAxis.scale().domain;
var redraw = options.redraw;
var svg = options.svg;
var discrete = options.discrete;
// scales
var xScale = xAxis.scale();
var yScale = yAxis.scale();
// min/max boundaries
var x_boundary = xScale.domain().slice();
var y_boundary = yScale.domain().slice();
// create d3 zoom handler
var d3zoom = d3.behavior.zoom();
// fix domain
function fixDomain(domain, boundary) {
if (discrete) {
domain[0] = parseInt(domain[0]);
domain[1] = parseInt(domain[1]);
}
domain[0] = Math.min(Math.max(domain[0], boundary[0]), boundary[1] - boundary[1]/scaleExtent);
domain[1] = Math.max(boundary[0] + boundary[1]/scaleExtent, Math.min(domain[1], boundary[1]));
return domain;
};
// zoom event handler
function zoomed() {
yDomain(fixDomain(yScale.domain(), y_boundary));
xDomain(fixDomain(xScale.domain(), x_boundary));
redraw();
};
// zoom event handler
function unzoomed() {
xDomain(x_boundary);
yDomain(y_boundary);
redraw();
d3zoom.scale(1);
d3zoom.translate([0,0]);
};
// initialize wrapper
d3zoom.x(xScale)
.y(yScale)
.scaleExtent([1, scaleExtent])
.on('zoom', zoomed);
// add handler
svg.call(d3zoom).on('dblclick.zoom', unzoomed);
};
// here chart is your nvd3 model
addZoom({
xAxis : chart.xAxis,
yAxis : chart.yAxis,
yDomain: chart.yDomain,
xDomain: chart.xDomain,
redraw : function() { chart.update() },
svg : svg
});
Problemi correlati
- 1. Istogrammi grafici in Highcharts
- 2. Come ottenere una filigrana immagine nei grafici HighCharts?
- 3. Come posso rilevare un evento di zoom nei grafici ad alta risoluzione?
- 4. Sincronizzazione di più grafici mediante nvd3
- 5. È possibile avere funzioni private (let definizioni) nei moduli F #?
- 6. È possibile avere attributi personalizzati nei tag AndroidManifest.xml?
- 7. highcharts - nomi di grafici per più serie di grafici a torta in un grafico
- 8. Inserzioni nei grafici in R
- 9. Come disegnare grafici a linee logaritmiche con nvd3
- 10. Caratteri nei grafici R
- 11. Highcharts panning
- 12. Ripristina zoom "Highcharts" dopo aver chiamato setExtremes
- 13. Come aggiungere lo zoom nei pulsanti di zoom in visjs usando angularjs?
- 14. Come è possibile avere deadlock senza transazioni?
- 15. È possibile ingrandire e rimpicciolire lo zoom?
- 16. È possibile avere specifiche parametrizzate in RSpec?
- 17. È possibile ignorare `assert`ions nei grafici di riferimento generati da doxygen?
- 18. Esegui la funzione dopo i grafici ad alta velocità dello zoom
- 19. Barre sovrapposte per grafici a barre multiasse NVD3 su disegno
- 20. È possibile avere dipendenze condizionali in gulp?
- 21. Flusso massimo nei grafici dinamici
- 22. Highcharts equivalente di questo grafico Raphaël.js demo - possibile?
- 23. HTML5 Libreria di grafici che supporta lo zoom con pizzico
- 24. highcharts nascondi il pulsante di reset dello zoom, lo zoom della chiamata reimposta al livello di programmazione
- 25. È possibile rilevare l'evento zoom in/out in iOS Safari?
- 26. linea + grafico a dispersione in nvd3
- 27. javascript grafici - grafico a linee nvd3 con due asse Y
- 28. È possibile avere un'app Facebook "di sfondo"?
- 29. come applicare la programmazione in parallelismo nei problemi grafici?
- 30. È possibile avere una funzione di costruzione in un tratto?
Il tuo link è rotto – Ofiris
Grazie, risolto. –
Abbiamo questa caratteristica per i grafici a dispersione? In caso contrario, come possiamo aggiungerlo? – Dinesh