Share Pastebin
Guest
Public paste!

jdahlin

By: a guest | Oct 2nd, 2008 | Syntax: None | Size: 4.44 KB | Hits: 87 | Expires: Never
Copy text to clipboard
  1. #!/usr/bin/env jython
  2. import sys
  3.  
  4. from java.awt import Color, GradientPaint
  5. from java.io import FileOutputStream
  6.  
  7. from org.jfree.chart import ChartFactory
  8. from org.jfree.chart.plot import PlotOrientation
  9. from org.jfree.data.category import DefaultCategoryDataset
  10. from org.jfree.util import PublicCloneable
  11. from org.jfree.chart.axis import NumberAxis, CategoryLabelPositions
  12. from org.jfree.chart.encoders import ImageEncoderFactory
  13.  
  14.  
  15. class BarChartDemo1:
  16.     def __init__(self, lines):
  17.         dataset = self._createDataset(lines)
  18.         self._chart = self._createChart3D(dataset)
  19.  
  20.     def _createDataset(self, lines):
  21.         dataset = DefaultCategoryDataset()
  22.         if lines:
  23.             for value, category in lines:
  24.                 dataset.addValue(value, "", category)
  25.         else:
  26.             dataset.addValue(1.0, "", "Category 1")
  27.             dataset.addValue(4.0, "", "Category 2")
  28.             dataset.addValue(3.0, "", "Category 3")
  29.             dataset.addValue(5.0, "", "Category 4")
  30.             dataset.addValue(5.0, "", "Category 5")
  31.             dataset.addValue(5.0, "", "Category 6")
  32.             dataset.addValue(7.0, "", "Category 7")
  33.             dataset.addValue(6.0, "", "Category 8")
  34.             dataset.addValue(8.0, "", "Category 9")
  35.             dataset.addValue(4.0, "", "Category 10")
  36.         return dataset
  37.  
  38.     def _createChart(self, dataset):
  39.         chart = ChartFactory.createBarChart("Bar Chart Demo 1",
  40.                                             "Category",
  41.                                             "Value",
  42.                                             dataset,
  43.                                             PlotOrientation.VERTICAL,
  44.                                             True, True, False)
  45.         chart.setBackgroundPaint(Color.white)
  46.  
  47.         plot = chart.getPlot()
  48.         plot.setBackgroundPaint(Color.lightGray)
  49.         plot.setDomainGridlinePaint(Color.white)
  50.         plot.setDomainGridlinesVisible(True)
  51.         plot.setRangeGridlinePaint(Color.white)
  52.  
  53.         numberaxis = plot.getRangeAxis()
  54.         numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits())
  55.  
  56.         barrenderer = plot.getRenderer()
  57.         barrenderer.setDrawBarOutline(False)
  58.  
  59.         gradientpaint = GradientPaint(0.0, 0.0, Color.blue,
  60.                                       0.0, 0.0, Color(0, 0, 64))
  61.         gradientpaint1 = GradientPaint(0.0, 0.0, Color.green,
  62.                                        0.0, 0.0, Color(0, 64, 0))
  63.         gradientpaint2 = GradientPaint(0.0, 0.0, Color.red,
  64.                                        0.0, 0.0, Color(64, 0, 0))
  65.         barrenderer.setSeriesPaint(0, gradientpaint)
  66.         barrenderer.setSeriesPaint(1, gradientpaint1)
  67.         barrenderer.setSeriesPaint(2, gradientpaint2)
  68.  
  69.         CONST = 0.52359877559829882
  70.         categoryaxis = plot.getDomainAxis()
  71.         pos = CategoryLabelPositions.createUpRotationLabelPositions(CONST)
  72.         categoryaxis.setCategoryLabelPositions(pos)
  73.  
  74.         return chart
  75.  
  76.     def _createChart3D(self, dataset):
  77.         chart = ChartFactory.createBarChart3D("3D Bar Chart Demo",
  78.                                               "Category",
  79.                                               "Value",
  80.                                               dataset,
  81.                                               PlotOrientation.VERTICAL,
  82.                                               True, True, False)
  83.         plot = chart.getPlot()
  84.         axis = plot.getDomainAxis()
  85.         axis.setCategoryLabelPositions(
  86.             CategoryLabelPositions.createUpRotationLabelPositions(
  87.             0.39269908169872414))
  88.         categoryitemrenderer = plot.getRenderer()
  89.         categoryitemrenderer.setBaseItemLabelsVisible(True)
  90.         categoryitemrenderer.setItemMargin(0.2)
  91.         return chart
  92.  
  93.     def write(self, filename, format='png'):
  94.         image = self._chart.createBufferedImage(1600, 1200)
  95.         factory = ImageEncoderFactory()
  96.         encoder = factory.newInstance(format)
  97.         bytes = encoder.encode(image)
  98.  
  99.         stream = FileOutputStream(filename)
  100.         stream.write(bytes)
  101.         stream.close()
  102.  
  103.  
  104. def main(args):
  105.     if len(args) < 2:
  106.         print 'Need a filename'
  107.     if len(args) == 3:
  108.         lines =[]
  109.         for line in open(args[2]).read().splitlines():
  110.             a, b = line.split(' ', 1)
  111.             lines.append((float(a), b))
  112.     else:
  113.         lines = None
  114.     filename = args[1]
  115.  
  116.     demo = BarChartDemo1(lines)
  117.     demo.write(filename)
  118.     print 'wrote', filename
  119.  
  120. if __name__ == '__main__':
  121.     sys.exit(main(sys.argv))