ラベル JFreeChart の投稿を表示しています。 すべての投稿を表示
ラベル JFreeChart の投稿を表示しています。 すべての投稿を表示

2008年5月2日金曜日

JFreeChartでローソク足チャート(3)時間軸の目盛の表示間隔を変更する

時間軸の目盛を一日ごとに表示:

二日ごとに表示( unit = DateTickUnit.new(DateTickUnit::DAY, 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.DateTickUnit
import org.jfree.chart.axis.NumberAxis

date_axis = DateAxis.new()
# 時間軸の目盛を一日ごとに表示
unit = DateTickUnit.new(DateTickUnit::DAY, 1)
date_axis.setTickUnit(unit)


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年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」になっていたので修正。

2008年4月22日火曜日

JFreeChartでローソク足チャート(1)とりあえず表示

Javaはクラス定義等が面倒なので、JRubyを使います。
JRuby 1.1, JFreeChart 1.0.9 を使用。

include Java
import java.util.Date
import javax.swing.JFrame
import java.util.GregorianCalendar

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()
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年3月27日木曜日

JFreeChartを使って、株価チャートを作ってみました

JFreeChart版


Gnuplot版


Gnuplotを使ったものよりきれいなんですが、JFreeChartはライブラリなのでプログラムを書かなくてはいけないのが面倒です…