Tue, November 20, 2007
円グラフを描画するJava2Dライブラリ(java2d)
普通、円グラフと言えば、複数の項目があり、その割合を表現するグラフですが、
今回は、指定した一つの項目の全体に占める割合だけを表現したい、
というケースで使用した。
既存のライブラリ(JFreeChartなど)や表計算ソフトでは、
このような円グラフの作り方がわからなかったので、
Java2D+jythonで画像を生成するコードを書きました。
完成した円グラフ

コード(jython)
import java as java
import javax as javax
RATE=0.35
OUTFILE="pieChart.png"
KEY_ANTIALIASING= java.awt.RenderingHints.KEY_ANTIALIASING
VALUE_ANTIALIAS_ON=java.awt.RenderingHints.VALUE_ANTIALIAS_ON
def paintPaiChart(g2,loc,size):
g2.setColor(java.awt.Color.LIGHT_GRAY)
# paint arc
kakudo=java.lang.Math.round(360*RATE)
g2.fillArc(loc.x,loc.y,size.width,size.height,90,kakudo*-1)
# paint circle
g2.drawOval(loc.x,loc.y,size.width,size.height)
loc=java.awt.Point(0,0)
size=java.awt.Dimension(100,100)
type=java.awt.image.BufferedImage.TYPE_4BYTE_ABGR
img=java.awt.image.BufferedImage(size.width+1,size.height+1,type)
g2=img.getGraphics()
g2.setRenderingHint(KEY_ANTIALIASING, VALUE_ANTIALIAS_ON);
# paint background
#g2.setColor(java.awt.Color.WHITE)
#g2.fill(java.awt.Rectangle(loc.x,loc.y,size.width+1,size.height+1))
paintPaiChart(g2,loc,size)
g2.dispose()
out=java.io.FileOutputStream(OUTFILE)
javax.imageio.ImageIO.write(img,"PNG",out)
out.close()