17. december 2007 - 14:56
Der er
9 kommentarer og 1 løsning
Nogen som ligger inde med kode eksempel for JFreeChart?
Hej Jeg skal til at lave en graf i en java applet. Grafen skal plotte f.eks. 10 data par i en ganske almindelig XY graf. (Skal senere udvides til flere funktioner) Nogen som ligger inde med et kode eksempel til dette simple eksempel hvor JFreeChart er benyttet?
Annonceindlæg fra SoftwareOne
17. december 2007 - 15:12
#1
import java.awt.Color; import java.awt.Dimension; import java.text.SimpleDateFormat; import java.util.Random; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.category.CategoryItemRenderer; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.time.Month; import org.jfree.data.time.MovingAverage; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.ui.ApplicationFrame; public class JFCDemo { public static void main(String[] args) { new TimeSeriesDemo(); new PieDemo(); new BarsDemo(); } } class TimeSeriesDemo extends ApplicationFrame { private static Random rng = new Random(); public TimeSeriesDemo() { super("Time series demo"); double[] v = new double[96]; v[0] = 100; for(int i = 1; i < v.length; i++) { v[i] = v[i-1] + 1 + 10 * (rng.nextDouble() - 0.5); } TimeSeries ts1 = new TimeSeries("Random data", Month.class); for(int y = 2000; y < 2008; y++) { for(int m = 1; m < 12; m++) { ts1.add(new Month(m, y), v[12 * (y - 2000) + m -1]); } } TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "3 month mov.avg.", 3, 0); TimeSeries ts3 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg.", 6, 0); TimeSeries ts4 = MovingAverage.createMovingAverage(ts1, "12 month mov.avg.", 12, 0); TimeSeriesCollection ds = new TimeSeriesCollection(); ds.addSeries(ts1); ds.addSeries(ts2); ds.addSeries(ts3); ds.addSeries(ts4); JFreeChart chart = ChartFactory.createTimeSeriesChart("Time series", "Time", "Value", ds, true, true, false); chart.setBackgroundPaint(Color.LIGHT_GRAY); XYPlot plot = chart.getXYPlot(); XYItemRenderer renderer = plot.getRenderer(); if (renderer instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer rr = (XYLineAndShapeRenderer) renderer; rr.setShapesFilled(true); rr.setSeriesPaint(0, Color.BLACK); rr.setSeriesPaint(1, Color.CYAN); rr.setSeriesPaint(2, Color.MAGENTA); rr.setSeriesPaint(3, Color.ORANGE); } DateAxis axis = (DateAxis)plot.getDomainAxis(); axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy")); ChartPanel chartpan = new ChartPanel(chart); chartpan.setPreferredSize(new Dimension(600, 600)); setContentPane(chartpan); pack(); setVisible(true); } } class PieDemo extends ApplicationFrame { private static Random rng = new Random(); public PieDemo() { super("Pie demo"); double[] v = new double[5]; for(int i = 0; i < v.length; i++) { v[i] = rng.nextInt(1000); } DefaultPieDataset ds = new DefaultPieDataset(); for(int i = 0; i < v.length; i++) { ds.setValue("Cat. " + (char)(65+i), v[i]); } JFreeChart chart = ChartFactory.createPieChart("Pie", ds, true, true, false); chart.setBackgroundPaint(Color.LIGHT_GRAY); PiePlot plot = (PiePlot) chart.getPlot(); plot.setSectionPaint(ds.getKey(0), Color.RED); plot.setSectionPaint(ds.getKey(1), Color.GREEN); plot.setSectionPaint(ds.getKey(2), Color.YELLOW); plot.setSectionPaint(ds.getKey(3), Color.BLUE); plot.setSectionPaint(ds.getKey(4), Color.PINK); ChartPanel chartpan = new ChartPanel(chart); chartpan.setPreferredSize(new Dimension(400, 400)); setContentPane(chartpan); pack(); setVisible(true); } } class BarsDemo extends ApplicationFrame { private static Random rng = new Random(); public BarsDemo() { super("Bars demo"); double[] v1 = new double[5]; for(int i = 0; i < v1.length; i++) { v1[i] = rng.nextInt(1000); } double[] v2 = new double[5]; for(int i = 0; i < v2.length; i++) { v2[i] = rng.nextInt(1000); } DefaultCategoryDataset ds = new DefaultCategoryDataset(); for(int i = 0; i < v1.length; i++) { ds.addValue(v1[i], "V1", "Cat. " + (char)(65+i)); ds.addValue(v2[i], "V2", "Cat. " + (char)(65+i)); } JFreeChart chart = ChartFactory.createBarChart("Bars", "Category", "Value", ds, PlotOrientation.VERTICAL, true, true, false); chart.setBackgroundPaint(Color.LIGHT_GRAY); CategoryPlot plot = chart.getCategoryPlot(); CategoryItemRenderer renderer = plot.getRenderer(); renderer.setSeriesPaint(0, Color.YELLOW); renderer.setSeriesPaint(1, Color.RED); ChartPanel chartpan = new ChartPanel(chart); chartpan.setPreferredSize(new Dimension(400, 400)); setContentPane(chartpan); pack(); setVisible(true); } }
17. december 2007 - 15:12
#2
Det er en app og ikke en applet, men den kan nemt konverteres till applet.
17. december 2007 - 15:13
#3
import java.awt.*; import java.text.*; import java.util.*; import javax.swing.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; import org.jfree.chart.axis.*; import org.jfree.chart.renderer.*; import org.jfree.data.*; import org.jfree.data.time.*; public class MovingAverageApplet extends JApplet { public void init() { String title = getParameter("title"); String data = getParameter("data"); int y1 = Integer.parseInt(getParameter("y1")); int m1 = Integer.parseInt(getParameter("m1")); int y2 = Integer.parseInt(getParameter("y2")); int m2 = Integer.parseInt(getParameter("m2")); StringTokenizer st = new StringTokenizer(getParameter("values"), ","); double[] x = new double[st.countTokens()]; int ix = 0; while (st.hasMoreTokens()) { x[ix] = Double.parseDouble(st.nextToken()); ix++; } init(title, data, y1, m1, y2, m2, x); } public void init(String title, String data, int y1, int m1, int y2, int m2, double[] val) { TimeSeries ts1 = new TimeSeries(data, Month.class); int y = y1; int m = m1; int ix = 0; while ((y < y2) || (m <= m2)) { ts1.add(new Month(m, y), val[ix]); m++; if (m > 12) { y++; m = 1; } ix++; } TimeSeries ts2 = MovingAverage.createMovingAverage(ts1, "6 month mov.avg. of " + data, 6, 0); TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(ts1); dataset.addSeries(ts2); JFreeChart chart = ChartFactory.createTimeSeriesChart(title, "Time", "Value", dataset, true, true, false); StandardLegend legend = (StandardLegend) chart.getLegend(); legend.setDisplaySeriesShapes(true); XYPlot plot = chart.getXYPlot(); XYItemRenderer renderer = plot.getRenderer(); if (renderer instanceof StandardXYItemRenderer) { StandardXYItemRenderer rr = (StandardXYItemRenderer) renderer; rr.setPlotShapes(true); rr.setShapesFilled(true); } DateAxis axis = (DateAxis) plot.getDomainAxis(); axis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy")); ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new Dimension(500, 300)); getContentPane().add(chartPanel); setVisible(true); } }
17. december 2007 - 15:14
#4
<APPLET CODEBASE="." CODE="MovingAverageApplet.class" ARCHIVE="movavgapp.jar" WIDTH="500" HEIGHT="300"> <PARAM NAME="title" VALUE="Moving Average Demo"> <PARAM NAME="data" VALUE="test data"> <PARAM NAME="y1" VALUE="2003"> <PARAM NAME="m1" VALUE="1"> <PARAM NAME="y2" VALUE="2004"> <PARAM NAME="m2" VALUE="6"> <PARAM NAME="values" VALUE="1, 4, 9, 16, 25, 36, 30, 24, 18, 12, 6, 0, 32, 48, 56, 60, 62, 63"> </APPLET>
17. december 2007 - 15:14
#5
det var saa en aegte applet
17. december 2007 - 16:08
#6
Hej Arne. Tak for eksemplerne. :-) Du ligger vel ikke inde med en smule mere simple eksempler?
17. december 2007 - 16:36
#7
Det er de simple eksempler ! Man kan lave noget rigtigt paent grafik med JFreeChart. Men man skal skrive lidt kode.
17. december 2007 - 20:12
#8
Okay... takker Arne. Smid et svar
17. december 2007 - 20:16
#9
svar
17. december 2007 - 20:21
#10
Du faar brug for eksemplerne, fordi de gratis docs er ikke saerligt god. Forfatterne af JFreeChart har lavet en (antager jeg) bedre dokumentation i en bog som saelges. Men med lidt snille kan man google et eller andet. Og ovenstaaende burde faktisk faa dig godt igang.
Kurser inden for grundlæggende programmering