Mathematica・グラフ描きの覚書き

MultipleListPlotは、グラフを書くのに非常に便利で、使いまくっています。gnuplot使ったことねぇ。


MultipleListPlot一つに関連したオプションが色々ある訳ですが、Mathematicaそのもののヘルプは結構見にくい。一般性がありすぎるせいなのかもしれない・・・。


以下は、Mathematica 4での内容です!!
Mathematica 6ではMultipleListPlotは使いません。ListPlotが発展したようです。(下では一部だけフォローしていますが)
ンモー、ファイルの互換性なくなるでしょ!!

目次

・基本
・2種類のデータを同時にPlotしたいとき。
・グラフを表示したくないとき。
・点の間に線を引きたいとき。
・引いた線の色を変えたいとき。
・点の色を変えたいとき。
・黒い点の濃淡を変えたいとき&複数データのとき。
・Plotの見る範囲を色々変えたいとき。
・Plotの見る範囲を、dataに含まれているもの全部見せろというとき。
・Plotの見る範囲を、xだけ指定してyは全部見たいというとき。
・グラフの大きさを指定したいとき
・グラフの縦横比を変更したいとき。
・軸にラベルをつけたいとき。
・グラフ全体にラベルをつけたいとき。
・グラフに枠をつけたいとき。
・枠をつけたグラフにラベルをつけたいとき。
・凡例をつけたいとき&複数データがあるとき。
・自動設定される点の形を細かく変えたいとき。例えば三角&三角と四角。
・自動設定される線の形を細かく変えたいとき。
・誤差のエラーバーをつける。
・第2軸を使う。



単にグラフが書きたい人用覚書。


ListPlotだけならばそのままで使えますが、MultipleListPlotを使う場合は必ずパッケージを読み込んでください。難しいことはありません。一行

<< Graphics`MultipleListPlot`

と書いておくだけです。Mathematica6*1
基本:dataは{{x1,y1},{x2,y2},...}形式のリスト

MultipleListPlot[data]

オプションは、

MultipleListPlot[data,option->optionstyle,option2->optionstyle2,...]

のような感じに、ひたすら加えていく。

・2種類のデータを同時にPlotしたいとき。

1つのグラフに2種類のデータを同時にPlotしたいとき、一つの方法としては、次のように2つのデータを並べると*2、点や線の種類を自動的に変えてPlotしてくれる。この場合の点・線の種類を自分で設定したい場合は下に記述。

MultipleListPlot[data1,data2]

他の方法としては、1つずつグラフを描いておいて、後で合成してしまう手もある。ただ、線・点の種類が同じになってしまうため、下に書いたようなoptionでそれぞれ変更した方が見やすいと思われる。

graph1=MultipleListPlot[data1]
graph2=MultipleListPlot[data2,PlotStyle->Hue[0] ]
Show[graph1,graph2]

最後のShowで、graph1とgraph2が合成されるが、結果的にグラフはdata1のもの、data2のもの、合成したもの、と3つ表示される。表示したくない場合は↓

・グラフを表示したくないとき。

グラフを描くコマンドを書いておいて表示しないというのは本末転倒のような気もするが、往々としてそういう場面はありうる。以下のようなoptionをつけることで、グラフを表示しないようにできる。

DisplayFunction -> Identity

逆に、表示することを明示するには

DisplayFunction -> $DisplayFunction

と書く。

点の間に線を引きたいとき。

PlotJoined->True

Mathematica 6*3

引いた線の色を変えたいとき。(数字はお好きに)

PlotStyle->Hue[0]
or
PlotStyle->RGBColor[1,0,0]

点の色を変えたいとき。

SymbolStyle -> Hue[0]

黒い点の濃淡を変えたいとき&複数データのとき。

SymbolStyle -> GrayLevel[0.5]
SymbolStyle -> {GrayLevel[0.5],GrayLevel[0.1]}

Plotの見る範囲を色々変えたいとき。

PlotRange->{{0,1},{0,1}}
{xの範囲指定、yの範囲指定}

Plotの見る範囲を、dataに含まれているもの全部見せろというとき。

Plotの範囲は、defaultでは自動的に見やすい範囲にされるため、見えない部分もありうる。

PlotRange->All

Plotの見る範囲を、xだけ指定してyは全部見たいというとき。

PlotRange->{{0,1},All}

グラフの大きさを指定したいとき。

ImageSize->600

グラフの縦横比を変更したいとき。

Defaultでは、縦横比は黄金比になってるらしいです。このオプションは、縦横比を指定します。正方形の場合は1を指定。

AspectRatio->1

軸にラベルをつけたいとき。

AxexLabel->{"x","y"}

グラフ全体にラベルをつけたいとき。

PlotLabel->"Label"

グラフに枠をつけたいとき。

Frame->True

枠をつけたグラフにラベルをつけたいとき。

FrameLabel->{"x","y"}

凡例をつけたいとき&複数データがあるとき。

PlotLegend->{"some data"}
PlotLegend->{"some data1","some data2"}

ただし、こうして書いたグラフをShowで合成すると結構変になる。凡例に影をつけたり位置を調整したりという細かい点はヘルプのLegendを参照。

自動設定される点の形を細かく変えたいとき。例えば三角&三角と四角。

SymbolShape->PlotSymbol[Triangle]
SymbolShape->{PlotSymbol[Triangle],PlotSymbol[Box]}

あらかじめ用意されているもので、自分が知っているのはTriangle,Box,Star,Diamond。
自分でsymbolを作る場合は、例えば×だと

SymbolShape->MakeSymbol[{Line[{{2, 2}, {-2, -2}}],Line[{{-2, 2}, {2, -2}}]

他にもMakeSymbol[RegularPolygon[5, 3]]とかも使う。MakeSymbol[Circle[{0, 0}, 0.001]とか、普通に図を描くグラフィックスプリミティブ(?)で指定することが可能。らしいけど使わない。上記指定でできたグラフが本当に三角かどうかは、デフォルトでは少し見にくい。グラフをepsで保存して見てみると、見やすい。

自動設定される線の形を細かく変えたいとき。(4種類のデータに対して)

PlotStyle -> {Dashing[{0}], Dashing[{0.001, 0.015}],Dashing[{0.001, 0.01, 0.015, 0.01}], Dashing[{0.015,0.01, 0.001,0.01, 0.001, 0.01}]}

数字は、黒線の長さ,空白の長さ,黒線の長さ,...で指定できる。上記は自分で作った直線,点線、一点鎖線、二点鎖線であるため、自動的にデフォルトで設定される点線や一点鎖線等とは微妙に線の長さが違うので注意。自作してください。
Mathematica 6*4

誤差のエラーバーをつける。

一番普通のシェリフ付きエラーバーは、dataの形式を

{{x1,y2},ErrorBar[error]}

と作り、MultipleListPlotにかければ良い。バーの上下の値が違うときは

{{x1,y2},ErrorBar[{error,error}]}

左右も欲しいときは

{{x1,y2},ErrorBar[{error,error},{error,error}]}

これは、Tableコマンドを使うと便利。dlist={{x1,y1,err1},{x2,y2,err2},...}のようなリストがあるならば、次のような感じで多分おk。

Table[{{dlist[ [i,1] ] ,dlist[ [i,2] ]},ErrorBar[ dlist[ [i,3] ] ]},{{i, Length[ dlist ]}}]

Mathematica 6*5

第2軸を使う。

基本はここ↓
http://support.wolfram.com/mathematica/graphics/2d/twoaxisgraph.ja.html
ここにあるように、MultipleListPlotを読み込んでから、TwoAxisListPlotという関数を定義し、使用します。これはパッケージではありません。コピペして使います。
やっていることは、普通にPlotした場合の軸の設定を取得し、倍率かけたりスケールしたりで描くらしい。でも、エラーバーつきデータを使うと変なことに。


あまりうまい解決ではないですが、とりあえず柔軟にできる説明。
基本的に、軸の線やラベルはTicks、FrameTicksで定義します。普通はAutomaticになっていますが、これを全て手動で書くと大変なことになります。
では、どうやってもう少し楽に再設定するか。上のページの関数にあるように、

old = AbsoluteOptions[ListPlot[data, Frame -> True, DisplayFunction -> Identity], FrameTicks][ [1, 2, 2] ];

のようにすると、普通に「data」をListPlotした場合、自動的に決まるTicksを取得できます。例えば、上の式だとoldに

{{0., 0., {0.00625,0.}, {GrayLevel[0.], AbsoluteThickness[0.25]}}, {0.2, 0.2, {0.00625, 0.}, {GrayLevel[0.], AbsoluteThickness[0.25]}},(略)}

が代入されるので、これをリストいじりで倍率変更すればOK。
倍率を変更した後は、FrameならMultipleListPlotのオプションに

FrameTicks -> {Automatic, Automatic, Automatic, old}

と書いておけば、変更された軸が第2軸のところに使われる。
でも、倍率とか考えているとめんどくさい。


・・・これくらいができれば、大体一通りはできる、と思うけどなぁ・・・。
今よく分かっていないのは、「MultipleListPlotで」点の大きさを変えたいとき。PointSizeをうまく働かせれない。

余談:Fit関数

Mathematica 4で使ってたNonlinearFitの代りに FindFitが使われるようになった、そうな。

*1:Mathematica 6になると・・・ヘルプより「MultipleListPlotの代りに ListPlotおよび ListLinePlotが使われるようになり,複数のデータが取れるようになった」とのことです。

*2:{data1,data2}とリスト形式で並べなくても良い?

*3:「新しい ListPlotのオプション Joinedが, MultipleListPlotのオプション PlotJoinedの代りに使われるようになった」だそうな。

*4:「Dashing[{Dot,Dash,LongDash}]の代りに Dashing[{Tiny,Small,Medium,Large}]が使われるようになった」そうな。

*5:「ErrorBarと関連したスタイルオプションがError Barプロットパッケージに含まれるようになった」そうな。つまり、エラーバーつけるには、パッケージを読みこませる必要があると。ちなみにListPlotでもなく、ErrorListPlotというものを使う。オプションはListPlotと同じものを取れるらしい。