[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:003826] Re: GGraph.line の legend
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:003826] Re: GGraph.line の legend
- From: Shin-ya Murakami <murashin@xxxxxxxxxxxxxx>
- Date: Wed, 21 Jan 2015 15:32:39 +0900 (JST)
高橋さま、みなさま、
村上真也です。
解決したわけではないのですが、参考までに、、、
numru/dclext.rbの2381行目あたりに以下のような記述があります。
# Annotates line/mark type and index (and size if mark).
# By default it is shown in the right margin of the viewport.
#
# * str is a String to show
# * line: true->line ; false->mark
# * vx: vx of the left-hand point of legend line (or mark position).
# * nil : internally determined
# * Float && > 0 : set explicitly
# * Float && < 0 : move it relatively to the left from the default
# * dx: length of the legend line (not used if mark).
# * nil : internally determined
# * Float && > 0 : set explicitly
# * vy: vy of the legend (not used if !first -- see below).
# * nil : internally determined
# * Float && > 0 : set explicitly
# * Float && < 0 : move it relatively lower from the default
# * first : if false, vy is moved lower relatively from the previous vy.
# * mark_size : size of the mark. if nil, size is used.
def legend(str, type, index, line=false, size=nil,
vx=nil, dx=nil, vy=nil, first=true, mark_size=nil)
legendの引数のfirstにはnewframe(true/false)が入って、
newframeにはggraph.lineの第二引数が入ります。
!firstが真の場合にはvyは使われない:
# * vy: vy of the legend (not used if !first -- see below).
とあるのですが、なぜvyが無効になるかと言うと、
# * first : if false, vy is moved lower relatively from the previous vy.
となっていて、自動的に決まることになっているからです。
ですが、実際には重なってしまっています。なんでかはわかりませんでした。
一応work aroundを以下につけます。
GGraph.line( gphys1, true , 'exchange'=>true, 'index'=>11,
'legend'=>'eq.', 'legend_vy'=>0.5-0.05*0 )
GGraph.line( gphys2, false, 'exchange'=>true, 'index'=>21,
'legend'=>nil)
GGraph.line( gphys3, false, 'exchange'=>true, 'index'=>31,
'legend'=>nil )
GGraph.line( gphys4, false, 'exchange'=>true, 'index'=>41,
'legend'=>nil )
DCLExt::legend('30N',1,21,true,nil,nil,nil,0.5-0.05*1,true)
DCLExt::legend('60N',1,31,true,nil,nil,nil,0.5-0.05*2,true)
DCLExt::legend('90N',1,41,true,nil,nil,nil,0.5-0.05*3,true)
From: "Yoshiyuki O. Takahashi" <yot@xxxxxxxxxxxxxx>
Date: Wed, 21 Jan 2015 14:50:13 +0900
> 高橋芳幸です.
>
> # 随分前に別のメーリングリストに送った(つもりの)内容ですが,
> # もう一度送ってみます.
>
> 下の件, どなたかもしわかりましたら教えて頂けると助かります.
>
> 添付した図にあるように, 複数の線を描いた場合に凡例が
> 上手く書けません.
>
> 添付した図には, 赤道, 30N, 60N, 90N の東西平均温度分布
> を描いていて, GGraph.line の 'legend' でラベルを指定
> していますが, 二つ目以降の凡例が重なってしまいます.
> 図を描くスクリプトを下につけておきます. また, 下の
> スクリプトでは, 'legend_vy' で凡例の位置を指定していま
> すが, この指定を消しても同じように二つ目以降が重なります.
> 使い方を何か勘違いしているでしょうか?
>
> なお, 使っているデータは,
> http://ruby.gfd-dennou.org/products/gphys/tutorial2/ncep2.Jan.clim.1981-2010.nc
> です.
>
> ----------------------------------------------------------------
> require "numru/ggraph"
> include NumRu
>
> gphys = GPhys::NetCDF_IO.open('ncep2.Jan.clim.1981-2010.nc', 'air')
>
> gphys1 = gphys.cut('lat'=> 0).mean('lon')
> gphys2 = gphys.cut('lat'=>30).mean('lon')
> gphys3 = gphys.cut('lat'=>60).mean('lon')
> gphys4 = gphys.cut('lat'=>90).mean('lon')
>
> DCL.gropn(2)
> DCL.sgpset('lcntl', false)
> DCL.sgpset('lfull',true)
> DCL.uzfact(0.75)
> DCL.sgpset('lfprop',true)
> GGraph.set_fig('viewport'=>[0.15,0.7,0.2,0.6])
>
> GGraph.line( gphys1, true , 'exchange'=>true, 'index'=>11,
> 'legend'=>'eq.', 'legend_vy'=>0.5-0.05*0 )
> GGraph.line( gphys2, false, 'exchange'=>true, 'index'=>21,
> 'legend'=>'30N', 'legend_vy'=>0.5-0.05*1 )
> GGraph.line( gphys3, false, 'exchange'=>true, 'index'=>31,
> 'legend'=>'60N', 'legend_vy'=>0.5-0.05*2 )
> GGraph.line( gphys4, false, 'exchange'=>true, 'index'=>41,
> 'legend'=>'90N', 'legend_vy'=>0.5-0.05*3 )
>
> DCL.grcls
>
----
Shin-ya Murakami
email: murashin@xxxxxxxxxxxxxx
WWW: http://www.gfd-dennou.org/member/murashin/