前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

3021 re(1):塗りのあるプロットの枠だけ白くしたい。
2015/9/4(金)11:53 - 竹の - takeno.iee.niit.ac.jp - 1745 hit(s)

引用する
現在のパスワード


例えば

plot 'file' with p ps 20 pt 7 lc "white", '' with p ps 19 pt 7 lc "red"

のように、少し大きめの白で塗って、その上に少し小さめの赤、とかやると
うまくいきません。これは、最初の白が全部かかれた後で、次の赤のデータ
が書かれてしまうからです。つまり、白丸、赤丸、白丸、赤丸と書かないと
いけないのですが、これがちょっと面倒です。

ということでとりあえずの方法を 3 つ紹介します。

1) multiplot + every + do for

set multiplot
do for [i=1:5] {
plot 'file' every ::(i-1)::(i-1) with p ps 20 pt 7 lc "whlite",\
'' every ::(i-1)::(i-1) with p ps 19 pt 7 lc "red"
}
unset multiplot

every ::(i-1)::(i-1) で i 行目のデータだけとりだし、それに対して白
丸、赤丸を書く、と言う作業を do for で繰り返す、という方法で、それ
を multiplot で全部重ねます。
なお、5 というデータ行数の指定は、最近の CVS 版では最後の行まで、
という指定 (*) ができるようになっています。

2) with circles と境界線

with points でなくて with circle を使う、という手もあります。with
circle なら点毎に円の大きさも変更できますし、境界線も書けるので、
それを使えば for も multiplot も不要です。

set style fill solid 1.0 border lc "white"
plot 'file' using 1:2:(0.1):(0):(360) with circles lc "red"

0.1 は半径で、適当なサイズに指定してください。ただし、これだと境界
の太さを変更できません。

3) with circles と plot for の入れ子

plot for では for の入れ子が使えます。これで白丸と赤丸を書きます。
色は、lc rgb variable を使用して、色を切り替えられるようにします。

set style fill solid 1.0 noborder
rad(j) = 0.1 + (2-j)*0.01
lc(j) = (j==1)? 65536*255+256*255+255 : 65536*255
plot for [i=1:5] for [j=1:2] 'file' \
using 1:2:(rad(j)):(0):(360):(lc(j)) \
every ::(i-1)::(i-1) with circles lc rgb var

rad(j) は j に応じて半径を少し大きくしたり小さくしたりするもの、
lc(j) は rgb variable に渡す 24bit 色値で、j=1 のときは白、j=2 で
は赤にしています。

ほかにもあるかもしれませんが、とりあえずはこんなところで。


〔ツリー構成〕

【3020】 塗りのあるプロットの枠だけ白くしたい。 2015/9/3(木)17:43 手歩進 (492)
┣【3021】 re(1):塗りのあるプロットの枠だけ白くしたい。 2015/9/4(金)11:53 竹の (1880)
┣【3023】 re(2):塗りのあるプロットの枠だけ白くしたい。 2015/9/5(土)22:53 手歩進 (192)
┣【3024】 re(2):塗りのあるプロットの枠だけ白くしたい。 2015/9/8(火)12:44 竹の (521)

前の画面〕 〔クリックポイント〕 〔最新の一覧〕 〔全て読んだことにする〕〔全て読んだことにして終了〕 〔終了

※ 『クリックポイント』とは一覧上から読み始めた地点を指し、ツリー上の記事を巡回しても、その位置に戻ることができます.