2008年4月23日水曜日

JFreeChartでローソク足チャート(2)ローソクの色を変える

陽線を赤、陰線を青に変更:

さらにローソクの枠を黒に変更:

前回のソースコードからの変更部分は色を変えています。
赤字の部分がローソクの色関係、青字がローソクの枠関係のコードです。

ソースコード(JRuby):
include Java
import java.util.Date
import javax.swing.JFrame
import java.util.GregorianCalendar
import java.awt.Color
import java.awt.BasicStroke


import org.jfree.chart.JFreeChart
import org.jfree.chart.ChartPanel
import org.jfree.chart.plot.XYPlot
import org.jfree.chart.renderer.xy.CandlestickRenderer
import org.jfree.data.xy.DefaultHighLowDataset
import org.jfree.chart.axis.DateAxis
import org.jfree.chart.axis.NumberAxis

date_axis = DateAxis.new()
price_axis = NumberAxis.new()

# 適当にデータを作成
cal = GregorianCalendar.new(2008, GregorianCalendar::JANUARY, 1)
dates = java.util.Date[5].new()
5.times do |i|
dates[i] = cal.getTime()
cal.add(GregorianCalendar::DAY_OF_MONTH, 1)
end

# to_java(:double)で、RubyのArrayをJavaのdouble型の配列に変換
opens = [100, 125, 150, 200, 150].to_java(:double)
highs = [120, 140, 160, 200, 150].to_java(:double)
lows = [100, 120, 130, 180, 130].to_java(:double)
closes = [115, 140, 155, 180, 135].to_java(:double)
volumes = [1000, 1500, 2500, 5000, 3000].to_java(:double)

dataset = DefaultHighLowDataset.new("Candle", dates, highs, lows, opens, closes, volumes)
renderer = CandlestickRenderer.new()
# 陽線を赤に
renderer.setUpPaint(Color::RED)
# 陰線を青に
renderer.setDownPaint(Color::BLUE)

# ローソクの枠を黒、1ピクセルで描画
renderer.setUseOutlinePaint(true)
renderer.setBaseOutlinePaint(Color::BLACK)
renderer.setBaseOutlineStroke(BasicStroke.new(1))


plot = XYPlot.new(dataset, date_axis, price_axis, renderer)

frame = JFrame.new("example")
chart = JFreeChart.new(plot)
panel = ChartPanel.new(chart)
frame.getContentPane().add(panel)
frame.pack()
frame.show()


2008/5/2 なぜか「5.times do |i|」が「5.times do i」になっていたので修正。

0 件のコメント:

コメントを投稿