JFREECHART es un proyecto Java en el sitio de código abierto SourceForge.net. Se utiliza principalmente para una variedad de gráficos, que incluyen: gráficos circulares, gráficos de barras (gráficos de barras normales y gráficos de barras de pila), gráficos de línea, gráficos de área, cuadros de distribución, gráficos mixtos, gráficos Gantt y algunos paneles.
Para aplicar jfreechart para dibujar imágenes, necesita dos paquetes JAR: jfreechart.jar y jCommon.jar, descargue la dirección.
Aquí hay un ejemplo de dibujar un gráfico de línea:
paquete yuth.jfree.demo; /*** Cree un gráfico de línea utilizando el conjunto de datos CategoryDataSet* Cuando hay muchos datos, el valor de la coordenada horizontal no se puede ver completamente en el jpanel, y se muestra como un ellipsis. * Solución: * Método 1. Al guardar el informe como una imagen, establezca el ancho de la imagen para que sea lo suficientemente grande (2000 o 3000), para que la imagen pueda mostrar el valor de la coordenada horizontal. * Este método trata los síntomas pero no la causa raíz, por lo que existe un segundo método* Método 2: Establezca la lable en el eje x para inclinarlo 45 grados. */ import java.awt.basicStroke; import java.awt.color; import java.awt.dimension; import java.awt.font; import java.awt.geom.ellipse2d; import java.io.file; import java.io.ioException; import java.net.url; import java.text.DecimalFormat; import java.util.random; import javax.swing.imageicon; import javax.swing.jpanel; importar org.jfree.chart.chartFactory; importar org.jfree.chart.chartpanel; importar org.jfree.chart.chartutilidades; importar org.jfree.chart.jfreechart; importar org.jfree.chart.axis.categoryaxis; importar org.jfree.chart.axis.CategoryLabelPositions; importar org.jfree.chart.axis.numberaxis; importar org.jfree.chart.labels.StandardCategoryItemLabelGenerator; importar org.jfree.chart.plot.CategoryPlot; importar org.jfree.chart.plot.plotorientation; importar org.jfree.chart.renderer.category.LineAndShaperenderer; importar org.jfree.chart.title.texttitle; importar org.jfree.data.category.categoryDataSet; importar org.jfree.data.category.defaultCategoryDataSet; importar org.jfree.ui.applicationframe; importar org.jfree.ui.horizontalalignment; importar org.jfree.ui.rectangleEdge; importar org.jfree.ui.rectangleInsets; importar org.jfree.ui.RefineryUtility; La clase pública LinechArtDemo1 extiende la aplicación Aplication {private static final Long SerialVersionUid = -6354350604313079793l; / * sintético */static class clase $ demo $ linechartdemo1; public LinechArtDemo1 (cadena de cadena) {super (String); Jpanel jpanel = createEmopanel (); jpanel.setPreferedSize (nueva dimensión (500, 270)); setContentPane (jpanel); } /*** Cómo distinguir diferentes leyendas: distinguir en función de si el segundo parámetro de defaultCategoryDataSet.addValue () es el mismo. * El orden de los datos agregados en la misma leyenda afecta la pantalla final; El orden de los datos agregados en las diferentes leyendas no afecta la pantalla final. * @return */ private static categoryDataSet createAtAset () {defaultCategoryDataSet DefaultCategoryDataSet = new DefaultCategoryDataSet (); //DefaultCategoryDataSet.AddValue () Análisis de parámetros: (numérico, nombre de leyenda, valor de coordenadas horizontal) /* // Agregar método de datos 1 // Legend 1 DefaultCategoryDataSet.addvalue (212.0, "Primero", "1001.0"); defaultCategoryDataSet.addValue (504.0, "Primero", "1001.1"); defaultCategoryDataSet.addValue (1520.0, "Primero", "1001.2"); // Legend 2 DefaultCategoryDataSet.addValue (712.0, "segundo", "1001.0"); defaultCategoryDataSet.addValue (1204.0, "segundo", "1001.1"); defaultCategoryDataSet.addValue (1820.0, "segundo", "1001.2"); /*///* // Agregar método de datos 2 // Número aleatorio experimentar para generar resultados de prueba aleatorios = new Random (12345); // Legend 1, 40 datos para (int i = 0; i <40; i ++) {defaultCategoryDataSet.addValue (random.nextint (100000), "primero", string.valueOf (1000+i)); } // Legend 2, 40 datos para (int i = 0; i <40; i ++) {defaultCategoryDataset.addValue (random.nextint (100000), "segundo", string.valueOf (1000+i)); } //*/return DefaultCategoryDataSet; } static private jfreechart createChart (categoryDataSet CategoryDataSet) {jfreeChart jfreeChart = ChartFactory.CreatElInechart ("Jfreechart test", // Título de la tabla "X", // Spinderle Label (X-Axis) "Y", // Rango de eje (Y-Axis) Platorientation.verical, // orientation false, // si se debe incluir leyenda verdadera, // mensaje de inmediato si falso); // si se puede usar URL // Cambiar el color de fondo del gráfico jfreechart.setbackgroundPaint (color.white); CategoryPlot CategoryPlot = (CategoryPlot) jfreechart.getPlot (); CategoryPlot.SetBackgroundPaint (color.lightgray); categoryPlot.setRangeGridLinePaint (color.white); categoryPlot.SetRangeGridLinesVisible (falso); // Modificar el eje de rango. Cambiamos el valor de escala predeterminado (permitido para mostrar decimales) para mostrar solo valores de escala entero. NumberAxis numberRaxis = (NumberAxis) CategyPlot.getRanGeAxis (); NumberRaxis.SetStandardTickUnits (NumberAxis.CreateIntegertickUnits ()); // Establezca la lable en el eje x para inclinarlo 45 grados CategyAxis Domainaxis = CategoryPlot.getDomainaxis (); Domainaxis.SetCategoryLabelPositions (categoryLabelPositions.up_45); // Establezca la lable en el eje x para inclinarlo 45 grados Domainaxis.setLowerMargin (0.0); // establecer la distancia desde el extremo izquierdo del dominio de la imagen. // Establezca la distancia desde el extremo derecho de la imagen lindshaperenderer lindshaperenderer = (lindshaperenderer) CategyPlot .getRenderer (); lindshaperenderer.setShapesVisible (verdadero); lindshaperenderer.setDrawoutLines (verdadero); lindshaperenderer.setuseFillPaint (verdadero); lindshaperenderer.setBaseFillPaint (color.white); lindshaperenderer.setSeriesStoke (0, nuevo BasicStroke (3.0f)); lindshaperenderer.setSeriesOutlinEstroke (0, nuevo BasicStroke (2.0f)); lindshaperenderer.setseriesshape (0, new Ellipse2d.Double (-5.0, -5.0, 10.0, 10.0)); lindshaperenderer.setItemMargin (0.4); //Set the spacing of each value of the x-axis (not working??) // Show data value DecimalFormat decimalformat1 = new DecimalFormat("##.##");// The format of data point displaying data values lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator( "{2}", decimalFormat1)); // Establezca el generador de la etiqueta del elemento de datos lindshaperenderer.setBaseItemLabelsVisible (verdadero); // La etiqueta básica de la etiqueta de la etiqueta lindshaperenderer.setBaseShapesFilled (true); // muestra iconos pequeños sólidos en el punto de datos return jfreechart; } public static jpanel createMopanel () {jfreechart jfreeChart = createChart (createATAset ()); Pruebe {ChartUtility.SaveChartasjpeg (nuevo archivo ("d: /linechartdemo1.png"), // La ruta física para guardar el archivo incluye la ruta y el nombre del archivo // 1.0f, // calidad de imagen, 0.0f ~ 1.0f jfreechart, // objeto de gráfico 1024, // width de imagen, esto determinará si el horizontal de axis de el valor del valor de la tabla de cuadros puede ser plenamente el valor de la tabla o el tharto de la tabla o el valor de la imagen. 768); } Catch (ioException e) {// tODO Auto Generated BLOCK E.PrintStackTRace (); } // Altura de imagen Devuelve nuevo ChartPanel (jfreeChart); } public static void main (string [] strings) {LinechArtDemo1 LinechartDemo1 = new LinechArtDemo1 ("JfreeChart - Demo del gráfico de línea 1"); linechartdemo1.pack (); RefineryUtility.CenterFrameonScreen (LinechartDemo1); linechartdemo1.setVisible (verdadero); } / * sintética * / static class $ (string string) {class var_class; intente {var_class = class.forname (string); } Catch (ClassNotFoundException ClassNotFoundException) {tire neoClassDefFoundError (classNotFoundException.getMessage ()); } return var_class; }}Resultados de ejecución:
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.