una - reportes graficos en java
Cree gráficos elegantes en Java, por ejemplo, con JFreeChart (4)
¿Cuál es la mejor manera de crear excelentes gráficos en Java? Parece que la opción principal para la creación de gráficos es JFreeChart, pero desafortunadamente, por defecto, parecen bastante simples.
Compare una muestra de JFreeChart: http://www.jfree.org/jfreechart/images/PriceVolumeDemo1.png con una de las bibliotecas de gráficos de JavaScript, por ejemplo, http://www.highcharts.com/demo/spline-symbols/grid o http://people.iola.dk/olau/flot/examples/graph-types.html
Los javascript se ven mejor: tienen líneas suaves, una fuente agradable de forma predeterminada y, en general, se ven bien en comparación con JFreeChart, que se ve muy claro.
¿Hay una biblioteca de gráficos construida sobre JFreeChart que se vea bien por defecto, o tal vez algún código de muestra para que un gráfico JFreeChart normal (por ejemplo, un gráfico de líneas) se vea bien?
Pruebe XChart . XChart es una biblioteca ligera de Java para trazar datos que serían una alternativa potencial a JFreeChart. Se centra en la simplicidad y no tiene todas las capacidades que tiene JFreeChart, pero ofrece un amplio conjunto de funciones de gráficos que incluyen Temas para aplicar diferentes "máscaras" a un gráfico. Puede crear fácilmente su propio Tema implementando una interfaz y aplicándolo a un Gráfico llamando a chart.setTheme(myTheme)
. El archivo jar solo tiene ~ 86 KB a partir de la versión 2.0.0 y no tiene dependencias. Tiene licencia bajo Apache 2.0 y está alojado en Github . Algunas capturas de pantalla se pueden encontrar aquí . Descargo de responsabilidad: soy el desarrollador principal del proyecto.
http://javafx.com/about-javafx/
Echa un vistazo a JavaFX 2.0
http://www.jfree.org/jfreechart/samples.html
Allí puede encontrar muchas muestras (necesita descargar una demostración de JFreeChart (inicio web)). Después de trabajar con jFreeChart, estaba pensando en mudarme a EasyChart (siga: http://www.objectplanet.com/easycharts/examples.html ), pero se parece mucho a jFreeChart en realidad. JFreeChart es bastante fácil de escribir, no sé sobre EasyChart.
Pero de acuerdo con su pregunta, no hay problema para cambiar una fuente, LineRenderer o cualquier otra cosa desde diseño en JFreeChart, por lo que puede modificarlo para que se vea exactamente como el que ha publicado desde JavaScript.
Tuve el mismo problema.
Este código hace que JFreeChart se vea como Highcharts (actualmente solo se admiten gráficos de barras). Fácilmente se puede hacer más eficiente :)
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);