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 tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
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