2011-11-25 6 views
6

Qual è il modo migliore per creare grafici di grande impatto in Java? Sembra che l'opzione principale per la creazione di grafici sia JFreeChart, ma sfortunatamente per impostazione predefinita vengono visualizzati in modo abbastanza semplice.Crea grafici eleganti in Java, ad esempio con JFreeChart

Confronta un campione di JFreeChart: http://www.jfree.org/jfreechart/images/PriceVolumeDemo1.png con una delle librerie di creazione di grafici Javascript, per esempio http://www.highcharts.com/demo/spline-symbols/grid o http://people.iola.dk/olau/flot/examples/graph-types.html

Quelli javascript aspetto molto più gradevole - hanno linee morbide, bel carattere di default, e nel complesso guardare bene rispetto a JFreeChart che sembra molto semplice.

C'è una libreria di diagrammi costruita su JFreeChart che sembra buona per impostazione predefinita, o forse un codice di esempio per fare in modo che un normale grafico JFreeChart (ad esempio grafico a linee) abbia un bell'aspetto?

risposta

3

http://www.jfree.org/jfreechart/samples.html

Vi si possono trovare molti campioni (è necessario scaricare un JFreeChart Demo (inizio web)). Dopo aver lavorato con jFreeChart, stavo pensando di passare a EasyChart (seguire: http://www.objectplanet.com/easycharts/examples.html), ma in realtà sembra molto simile a jFreeChart. JFreeChart è abbastanza facile da scrivere, che io non conosco su EasyChart.

Ma secondo la tua domanda, non c'è alcun problema nel cambiare un Font, LineRenderer o altro da desing in JFreeChart, così puoi modificarlo per assomigliare esattamente a quello che hai postato da JavaScript.

+1

Ho pensato ci fosse un modo per cambiare la maggior parte dello stile, come il tipo di carattere e la linea di rendering - Credo che speravo in un po 'di codice di esempio di veramente grandi grafici che cercano di salvare me di dover giocare con è troppo. I grafici della vetrina nella demo di avvio web di JFreeChart sono comunque un buon inizio, dovrebbero usare schermate di quelli sulla loro pagina di esempio. – user1043466

+0

Vedere anche questa [risposta] (http://stackoverflow.com/q/7323424/230513), nonché ['org.jfree.chart.annotations'] (http://www.jfree.org/jfreechart/ api/javadoc/org/jfree/grafico/annotazioni/package-summary.html). – trashgod

11

ho avuto lo stesso problema.

Questo codice rende JFreeChart simile a Highcharts (attualmente sono supportati solo i diagrammi a barre). Si potrebbe facilmente essere reso più efficiente :)

String fontName = "Lucida Sans"; 
    JFreeChart chart = ChartFactory.createBarChart(null, "", "", dataset, PlotOrientation.VERTICAL, false, true, false); 

    StandardChartTheme theme = (StandardChartTheme)org.jfree.chart.StandardChartTheme.createJFreeTheme(); 

    theme.setTitlePaint(Color.decode("#4572a7")); 
    theme.setExtraLargeFont(new Font(fontName,Font.PLAIN, 16)); //title 
    theme.setLargeFont(new Font(fontName,Font.BOLD, 15)); //axis-title 
    theme.setRegularFont(new Font(fontName,Font.PLAIN, 11)); 
    theme.setRangeGridlinePaint(Color.decode("#C0C0C0")); 
    theme.setPlotBackgroundPaint(Color.white); 
    theme.setChartBackgroundPaint(Color.white); 
    theme.setGridBandPaint(Color.red); 
    theme.setAxisOffset(new RectangleInsets(0,0,0,0)); 
    theme.setBarPainter(new StandardBarPainter()); 
    theme.setAxisLabelPaint(Color.decode("#666666") ); 
    theme.apply(chart); 
    chart.getCategoryPlot().setOutlineVisible(false); 
    chart.getCategoryPlot().getRangeAxis().setAxisLineVisible(false); 
    chart.getCategoryPlot().getRangeAxis().setTickMarksVisible(false); 
    chart.getCategoryPlot().setRangeGridlineStroke(new BasicStroke()); 
    chart.getCategoryPlot().getRangeAxis().setTickLabelPaint(Color.decode("#666666")); 
    chart.getCategoryPlot().getDomainAxis().setTickLabelPaint(Color.decode("#666666")); 
    chart.setTextAntiAlias(true); 
    chart.setAntiAlias(true); 
    chart.getCategoryPlot().getRenderer().setSeriesPaint(0, Color.decode("#4572a7")); 
    BarRenderer rend = (BarRenderer) chart.getCategoryPlot().getRenderer(); 
    rend.setShadowVisible(true); 
    rend.setShadowXOffset(2); 
    rend.setShadowYOffset(0); 
    rend.setShadowPaint(Color.decode("#C0C0C0")); 
    rend.setMaximumBarWidth(0.1); 

enter image description here

9

provare XChart. XChart è una libreria Java leggera per il tracciamento dei dati che sarebbe una potenziale alternativa a JFreeChart. Il suo focus è sulla semplicità e non ha tutte le funzionalità di JFreeChart, ma offre un ricco set di funzionalità di creazione dei grafici, tra cui temi per applicare diverse "skin" a un grafico. È possibile creare facilmente il proprio tema implementando un'interfaccia e applicandola a un grafico chiamando chart.setTheme(myTheme). Il jar è solo ~ 86 KB a partire dalla versione 2.0.0 e non ha dipendenze. È concesso in licenza con Apache 2.0 ed è ospitato su Github. Alcuni screenshot possono essere trovati here. Disclaimer: sono il principale responsabile del progetto.

enter image description here

+1

Davvero impressionato da xchart. Consigliamo vivamente a tutti coloro che necessitano di uno strumento grafico semplice. Grazie per il tuo lavoro! – ruX