|
|
require 'java'
include_class 'java.awt.Color'
include_class 'java.awt.image.BufferedImage'
include_class 'java.io.DataOutputStream'
include_class 'java.io.FileOutputStream'
include_class 'java.io.IOException'
include_class 'java.util.Hashtable'
include_class 'org.jfree.chart.axis.NumberAxis'
include_class 'org.jfree.chart.encoders.ImageEncoder'
include_class 'org.jfree.chart.encoders.ImageEncoderFactory'
include_class 'org.jfree.chart.plot.PlotOrientation'
include_class 'org.jfree.chart.plot.XYPlot'
include_class 'org.jfree.chart.renderer.xy.XYLineAndShapeRenderer'
include_class 'org.jfree.data.xy.XYDataset'
include_class 'org.jfree.data.xy.XYSeries'
include_class 'org.jfree.data.xy.XYSeriesCollection'
module Java
include_package 'org.jfree.chart'
end
class LineChartDemo6
def initialize(title)
dataset = createDataset();
chart = createChart(dataset);
bufferedImage=chart.createBufferedImage(400,300);
imageEncoder=ImageEncoderFactory.newInstance("png");
begin
imgData[] = imageEncoder.encode(bufferedImage);
fos = FileOutputStream.new("C:\\out.png");
ds = DataOutputStream.new( fos );
ds.write(imgData, 0, imgData.length);
rescue IOException => ioe
System.out.println( "IO error: " + ioe );
end
end
def createDataset
series1 = XYSeries.new("First");
series1.add(1.0, 1.0)
series1.add(2.0, 4.0)
series1.add(3.0, 3.0)
series1.add(4.0, 5.0)
series1.add(5.0, 5.0)
series1.add(6.0, 7.0)
series1.add(7.0, 7.0)
series1.add(8.0, 8.0)
series2 = XYSeries.new("Second")
series2.add(1.0, 5.0)
series2.add(2.0, 7.0)
series2.add(3.0, 6.0)
series2.add(4.0, 8.0)
series2.add(5.0, 4.0)
series2.add(6.0, 4.0)
series2.add(7.0, 2.0)
series2.add(8.0, 1.0)
series3 = XYSeries.new("Third")
series3.add(3.0, 4.0)
series3.add(4.0, 3.0)
series3.add(5.0, 2.0)
series3.add(6.0, 3.0)
series3.add(7.0, 6.0)
series3.add(8.0, 3.0)
series3.add(9.0, 4.0)
series3.add(10.0, 3.0)
dataset = XYSeriesCollection.new
dataset.addSeries(series1)
dataset.addSeries(series2)
dataset.addSeries(series3)
return dataset
end
def createChart(dataset)
# create the chart...
chart = Java::ChartFactory.createXYLineChart(
"Line Chart Demo 6", # chart title
"X", # x axis label
"Y", # y axis label
dataset, # data
PlotOrientation.VERTICAL,
true, # include legend
true, # tooltips
false) # urls
# NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
chart.setBackgroundPaint(Color.white);
# get a reference to the plot for further customisation...
plot = XYPlot.chart.getXYPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
renderer = XYLineAndShapeRenderer.new();
renderer.setSeriesLinesVisible(0, false);
renderer.setSeriesShapesVisible(1, false);
plot.setRenderer(renderer);
# change the auto tick unit selection to integer units only...
rangeAxis = plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
# OPTIONAL CUSTOMISATION COMPLETED.
return chart;
end
end
demo = LineChartDemo6.new("Line Chart Demo 6")
|