2017-10

Latest Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[ARV] mingplotで対数グラフ

宿題に手を付けてみる。

Y軸を変えるのは、最小値の取り方でちょっとひっかかったけど、すんなり行った。
数字の表示が下の方で密集して見えなくなるのも、もうちょっと工夫が必要だけど、なんとか処置した。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784022731227&log=1

と思って本番環境に持っていったら、一部ISBNでグラフが出ない。
http://worris3.sakura.ne.jp/arv/view.cgi?isbn=9784774130422&log=1
failed assertion (MingError)とか言ってる。
よく見たら、せぐふぉめしてる。[BUG] Segmentation fault
お手上げします。


class MingChart
def convert_y (y, side)
if side == :left
y_min = @left_y_min
y_max = @left_y_max
else
y_min = @right_y_min
y_max = @right_y_max
end
raise if y < y_min or y > y_max
y_diff = Math.log10(y_max) - (y_min==0 ? 0 : Math.log10(y_min))

if (side == :left and @left_y_direction == :upside_down) or
(side == :right and @right_y_direction == :upside_down)
begin
(y_diff - (Math.log10(y_max) - Math.log10(y))) * (@y_length / y_diff) + @canvas_y_margin
rescue
(y_diff - Math.log10(y_max))*(@y_length / y_diff)+@canvas_y_margin
end

else
(y_diff - (y - y_min)) * (@y_length / y_diff) + @canvas_y_margin
end
end

def adjust_scale (min, max)
diff = max - min
raise if diff == 0

n, m = Math.frexp10(diff)
diff2 = (n * 10).round.to_f # 10-99

ndivisions = nil
interval = nil
[20, 10, 5, 2].each {|divider|
tmp = diff2 / divider
if (tmp >=16 and tmp < 64) or divider == 2
ndivisions = tmp.ceil
interval = (divider * 10 ** (m - 1)).to_f
break
end
}

adjusted_min = (min / interval).floor * interval
adjusted_max = adjusted_min + interval * ndivisions
while adjusted_max < max
adjusted_max += interval
ndivisions += 1
end
float_p = if interval.floor != interval then true else false end

raise if adjusted_max < max
raise if adjusted_min > min
return ndivisions, adjusted_min, adjusted_max, float_p
end

def add_scaleline (n, at, float_p)
string=''

text, width, height = create_text(string, @scale_text_color, @scale_font_size)
if at == :bottom
x_margin = - width / 2
y_margin = height + @scale_margin
xx = convert_x(n)
yy = @canvas_height - @canvas_y_margin
else
if at == :left
x_margin = - width - @scale_margin
xx = @canvas_x_margin
else
x_margin = @scale_margin
xx = @canvas_width - @canvas_x_margin
end
y_margin = height / 2
yy = convert_y(n, at)
end
line = SWFShape.new
line.set_line(@scale_line_width, *@scale_line_color.to_a)
line.move_pen_to(xx, yy)
if at == :bottom
line.draw_line(0, -@scale_line_length)
else
line.draw_line(@scale_line_length, 0) if at == :left
line.draw_line(-@scale_line_length, 0) if at == :right
end
@movie.add(line)
end


def add_scales
add_x_scale(@x_min, @x_float_p)
@x_nscales.times {|i|
x = @x_min + ((@x_max - @x_min).to_f / @x_nscales) * (i + 1)
add_x_scale(x, @x_float_p)
}

if @left_y_min and @left_y_max
add_y_scale(@left_y_min, :left, @left_y_float_p)
@left_y_nscales.times {|i|
y = @left_y_min +
((@left_y_max - @left_y_min).to_f / @left_y_nscales) * (i + 1)
if i < @left_y_nscales/4 or (i%8==0)
add_y_scale(y, :left, @left_y_float_p)
else
add_scaleline(y, :left, @left_y_float_p)
end

}
end

if @right_y_min and @right_y_max
add_y_scale(@right_y_min, :right, @right_y_float_p)
@right_y_nscales.times {|i|
y = @right_y_min +
((@right_y_max - @right_y_min).to_f / @right_y_nscales) * (i + 1)
if i < @right_y_nscales/4 or (i%8==0)
add_y_scale(y, :right, @right_y_float_p)
else
add_scaleline(y, :right, @right_y_float_p)
end
}
end
end

end


MingChart.newする時にパラメータを与えるんじゃなくてメソッド上書きしちゃってるけど。

ちなみにFlashの中身だけをJavaScriptで書き換えることはできないのかな。imgみたいにsrc=で。ここによるとできないってことでいいのか。
スポンサーサイト

トラックバック

http://worris.blog61.fc2.com/tb.php/50-575d4947

この記事にトラックバックする(FC2ブログユーザー)

«  | HOME |  »

移転しました。

ブログ引っ越しました。
無用の科学あるいは錬金術

 

株価情報

 

最近の記事

最近のコメント

 

最近のトラックバック

月別アーカイブ

カテゴリー

RSSフィード

ブログ内検索

 

なかのひと

 

ヘビーローテーション

 

 

リンク

広告

 

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。