- #!/usr/bin/env jython
- import sys
- from java.awt import Color, GradientPaint
- from java.io import FileOutputStream
- from org.jfree.chart import ChartFactory
- from org.jfree.chart.plot import PlotOrientation
- from org.jfree.data.category import DefaultCategoryDataset
- from org.jfree.util import PublicCloneable
- from org.jfree.chart.axis import NumberAxis, CategoryLabelPositions
- from org.jfree.chart.encoders import ImageEncoderFactory
- class BarChartDemo1:
- def __init__(self, lines):
- dataset = self._createDataset(lines)
- self._chart = self._createChart3D(dataset)
- def _createDataset(self, lines):
- dataset = DefaultCategoryDataset()
- if lines:
- for value, category in lines:
- dataset.addValue(value, "", category)
- else:
- dataset.addValue(1.0, "", "Category 1")
- dataset.addValue(4.0, "", "Category 2")
- dataset.addValue(3.0, "", "Category 3")
- dataset.addValue(5.0, "", "Category 4")
- dataset.addValue(5.0, "", "Category 5")
- dataset.addValue(5.0, "", "Category 6")
- dataset.addValue(7.0, "", "Category 7")
- dataset.addValue(6.0, "", "Category 8")
- dataset.addValue(8.0, "", "Category 9")
- dataset.addValue(4.0, "", "Category 10")
- return dataset
- def _createChart(self, dataset):
- chart = ChartFactory.createBarChart("Bar Chart Demo 1",
- "Category",
- "Value",
- dataset,
- PlotOrientation.VERTICAL,
- True, True, False)
- chart.setBackgroundPaint(Color.white)
- plot = chart.getPlot()
- plot.setBackgroundPaint(Color.lightGray)
- plot.setDomainGridlinePaint(Color.white)
- plot.setDomainGridlinesVisible(True)
- plot.setRangeGridlinePaint(Color.white)
- numberaxis = plot.getRangeAxis()
- numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits())
- barrenderer = plot.getRenderer()
- barrenderer.setDrawBarOutline(False)
- gradientpaint = GradientPaint(0.0, 0.0, Color.blue,
- 0.0, 0.0, Color(0, 0, 64))
- gradientpaint1 = GradientPaint(0.0, 0.0, Color.green,
- 0.0, 0.0, Color(0, 64, 0))
- gradientpaint2 = GradientPaint(0.0, 0.0, Color.red,
- 0.0, 0.0, Color(64, 0, 0))
- barrenderer.setSeriesPaint(0, gradientpaint)
- barrenderer.setSeriesPaint(1, gradientpaint1)
- barrenderer.setSeriesPaint(2, gradientpaint2)
- CONST = 0.52359877559829882
- categoryaxis = plot.getDomainAxis()
- pos = CategoryLabelPositions.createUpRotationLabelPositions(CONST)
- categoryaxis.setCategoryLabelPositions(pos)
- return chart
- def _createChart3D(self, dataset):
- chart = ChartFactory.createBarChart3D("3D Bar Chart Demo",
- "Category",
- "Value",
- dataset,
- PlotOrientation.VERTICAL,
- True, True, False)
- plot = chart.getPlot()
- axis = plot.getDomainAxis()
- axis.setCategoryLabelPositions(
- CategoryLabelPositions.createUpRotationLabelPositions(
- 0.39269908169872414))
- categoryitemrenderer = plot.getRenderer()
- categoryitemrenderer.setBaseItemLabelsVisible(True)
- categoryitemrenderer.setItemMargin(0.2)
- return chart
- def write(self, filename, format='png'):
- image = self._chart.createBufferedImage(1600, 1200)
- factory = ImageEncoderFactory()
- encoder = factory.newInstance(format)
- bytes = encoder.encode(image)
- stream = FileOutputStream(filename)
- stream.write(bytes)
- stream.close()
- def main(args):
- if len(args) < 2:
- print 'Need a filename'
- if len(args) == 3:
- lines =[]
- for line in open(args[2]).read().splitlines():
- a, b = line.split(' ', 1)
- lines.append((float(a), b))
- else:
- lines = None
- filename = args[1]
- demo = BarChartDemo1(lines)
- demo.write(filename)
- print 'wrote', filename
- if __name__ == '__main__':
- sys.exit(main(sys.argv))
