[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:003831] Re: GGraph.line の legend



堀之内さん, 村上真也さん,

高橋芳幸です.

# 前に送ったメールは davis-ml 宛でした.
# dennou-ruby には最近入ったので.
# でも, 前のメールは送られていなかったのですね.

いずれにしろ, 随分前にデバッグはされていたということで良かっ
たです.
自分は debian パッケージでインストールされているものを使って
いるので, わかっていませんでした.
お騒がせしました.


On 2015/01/21 17:11, Takeshi Horinouchi wrote:
> 堀之内です。
> 
>> 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丁目
> 
> 
>