[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:003832] Re: GGraph.line の legend
- To: dennou-ruby@xxxxxxxxxxx
- Subject: [dennou-ruby:003832] Re: GGraph.line の legend
- From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>
- Date: Wed, 21 Jan 2015 17:53:42 +0900
堀之内です。
> > > しかし,
> > >
> > >> !firstが真の場合にはvyは使われない:
> > >
> > > となってないですね...。
この件は,大塚さんの bugfix のときに仕様変更になった
のだろうと思います。現状の方が好ましいので,ドキュメントの
ほうを合わせておきました。
> 堀之内です。
>
> > Debian wheezyのgphys 1.2.2です。
>
> おお,なんと3年前のだ。
> それなら,その後に大塚さんのデバグの記録があります。
>
> > 堀之内様、
> >
> > 村上真也です。
> >
> > >> > # 随分前に別のメーリングリストに送った(つもりの)内容ですが,
> > >> > # もう一度送ってみます.
> > >
> > > すみません,記憶にないので,読み飛ばしてたようです。
> > > ごめんなさい。
> >
> > ちなみに私も受け取っていません。
> > 推測ですが、高橋さんがdennou-rubyを購読する前に
> > 送ったので、メールが撃墜されたのではないでしょうか。
> >
> > > で,テストプログラムを実行してみました。git 最新だけでなく,
> > > gphys-1.4.1 でもやってみましたが,問題なく表示されます
> > > (添付)。みなさん使ってるバージョンは何でしょう?
> > > (こちらで使った ruby のバージョンは 1.9.3 です。)
> >
> > Debian wheezyのgphys 1.2.2です。
> > rubyは1.9.3です。
> >
> > gphys 1.4.1のdclext.rbのlegendの処理は、
> > (あまりよくわかっていないのですが)バグが潰れているように見えます。
> > 1.2.2は
> > vpx1,vpx2,vpy1,vpy2 = DCL.sgqvpt
> > if first
> > if !vy
> > vy = vpy2 - 0.04
> > elsif vy < 0
> > vy = ( vpy2 - 0.04 ) + vy
> > end
> > @vy = vy
> > else
> > vy = @vy - 1.5*size
> > end
> > となっていて、else節の中が@vyに代入するのでなくてvyに代入されています。
> > これが問題のような気がします。
> > 1.4.1では
> > vpx1,vpx2,vpy1,vpy2 = DCL.sgqvpt
> > if first || (!@vy)
> > vy ||= vpy2 - 0.04
> > vy += vpy2 - 0.04 if vy < 0
> > else
> > vy ||= @vy - 1.5 * size
> > end
> > @vy = vy
> > となっていて、if節の中でvyに代入、外で@vy=vyとする、と一貫しています。
> >
> > 堀之内さんの結果に従えば、Debianパッケージがアップデートされれば
> > 解決しそうですね。
> >
> > From: Takeshi Horinouchi <horinout@xxxxxxxxxxxxxxxxx>
> > Date: Wed, 21 Jan 2015 16:42:08 +0900
> >
> > > 高橋さま
> > >
> > >> > # 随分前に別のメーリングリストに送った(つもりの)内容ですが,
> > >> > # もう一度送ってみます.
> > >
> > > すみません,記憶にないので,読み飛ばしてたようです。
> > > ごめんなさい。
> > >
> > > で,テストプログラムを実行してみました。git 最新だけでなく,
> > > gphys-1.4.1 でもやってみましたが,問題なく表示されます
> > > (添付)。みなさん使ってるバージョンは何でしょう?
> > > (こちらで使った ruby のバージョンは 1.9.3 です。)
> > >
> > > dcl_takahashi_orig.png: 高橋さんのテストプログラムの実行結果
> > > dcl_vy_auto.png: line の2回目以降の legend_vy 指定を
> > > なくした場合。
> > >
> > > 村上さん,解説ありがとうございました。
> > > 自分でもよく覚えてなかったので有り難かったです。
> > >
> > > しかし,
> > >
> > >> !firstが真の場合にはvyは使われない:
> > >
> > > となってないですね...。
> > >
> > > 堀之内
> > >
> > >> 高橋さま、みなさま、
> > >>
> > >> 村上真也です。
> > >>
> > >> 解決したわけではないのですが、参考までに、、、
> > >>
> > >> 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/
> > >
> > > 堀之内 武
> > > 北海道大学 地球環境科学研究院 地球圏科学部門
> > > 〒060-0810 札幌市北区北10条西5丁目
> > ----
> > Shin-ya Murakami
> > email: murashin@xxxxxxxxxxxxxx
> > WWW: http://www.gfd-dennou.org/member/murashin/
>
> 堀之内 武
> 北海道大学 地球環境科学研究院 地球圏科学部門
> 〒060-0810 札幌市北区北10条西5丁目
>
堀之内 武
北海道大学 地球環境科学研究院 地球圏科学部門
〒060-0810 札幌市北区北10条西5丁目