FrontPage

2009/11/12からのアクセス回数 7854

グラフの使い方

sageでのグラフの使い方について、説明します。

レファレンスマニュアル を参考にしながら見てください。

基本図形

計算結果の表示の他に、補足説明などのために基本図形を表示したい場合があります。 以下によく使う基本図形

  • 円: circle
  • 文字列: text
  • 線: line
  • 点: point
  • ポリゴン: poligon

を示します。

円は以下のように表示します。 circle((座標), 半径) circleの例を以下に示します。座標は原点(0, 0)、半径は1です。

sage入力:

circle((0,0), 1)

sage0.png

文字列

次に文字列textです。表示する文字列には、$で囲んでlatexの数式を表示することもできます。残念ながら日本語は文字化けしてしてしまいます。

textは以下の形式で使用します。文字列の中心が指定した座標になるようにプロットされます。

text(文字列, (座標))

textの例を以下に示します。原点近くで日本語文字が化けています。

sage入力:

text('test', (1, 1)) + text('$f(x) = x^2 + 1$', (0.5,0.5))+text('テスト', (0,0))

sage0-1.png

線(line)は、指定された座標のリストを線で結びます。 lineの使い方は、簡単です。

line([(開始座標), (終了座標)])

これまで、説明しないで使ってきた点(point)です。

point((座標), オプション属性(pointsize, rgccolor, facetedがよく使われます))

以下に例を示します。日本語が使えないため、タイトルをhtml関数で先に表示し、その後に図形を表示します。 show関数で表示領域を指定し、すべての図形が表示されるようにします。

sage入力:

html('<center>テスト</center>')
c = circle((0.5,0.5), 1)
l = line([(0,0), (1, 1)])
pt = point((0.5, 0.5), rgbcolor='white', pointsize=30, faceted=True)
(c + l + pt).show(xmin=-1, xmax=2)

sage0-2.png

ポリゴンの塗りつぶし

polygon関数を使うとリストで指定した座標の図形を塗りつぶします。

sage入力:

polygon([(0,0), (1,1), (0,1)])

sage0-3.png

2次元グラフ

sageでは、簡単に2次元グラフを表示することができます。

2次元グラフには、plot関数を使用します。 plot関数のもっとも単純な呼び出し方法は、

plot(関数, 最小値, 最大値)

です。

例として、\(y=cos(x)\) のグラフを−2π から2πまで描画してみます。

sage入力:

plot(cos, -2*pi, 2*pi)

sage0-4.png

グラフの基本

もう少しplotの使い方を調べてみましょう。

plotの呼び出しは、以下の形式で覚えると便利です。

plot(関数, [変数名, 最小, 最大], オプション)

オプションは、省略可能です。plotのオプションは、plot.optionsで知ることができます。 それ以外にもGraphicsのオプションも使えます。よく使うオプションは、

  • 描画範囲指定のxmin, xmax, ymin, ymax
  • グラフの比率を指定するaspect_ratio
  • 線の色指定のrgbcolor

などです。

sage入力:

# plotのオプションを知る
plot.options

{'fillalpha': 0.5, 'detect_poles': False, 'plot_points': 200, 'thickness': 1, 'adaptive_tolerance': 0.01, 'fillcolor': 'automatic','alpha': 1, 'adaptive_recursion': 5, 'rgbcolor': (0, 0, 1), 'fill':None}

# Graphicsのオプションを知る
Graphics.show?

Graphics.show.png

重ね書き

重ね書きの例として、直線に○をプロットしてみます。

関数 \(f(x)=\frac{(x2−1)}{(x−1)}\)を-1から3の範囲で表示し、座標(1, 2)に丸をプロットします。

描画範囲は、(0, 0)から(3, 4)とします。

sage入力:

# 重ね書きの例
p = plot((x^2 - 1)/(x - 1), x, -1, 3)
pt = point((1, 2), rgbcolor='white', pointsize=30, faceted=True)
g = p+pt
g.show(xmin=0, ymin=0, xmax=3, ymax=4)

sage0-5.png

plotはlimitを計算する

グラフをみて、おやっと思われた方もいると思いますが、\(f(x)=\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、\(x=1\)では分母が0になりエラーとなるはずですが、 表示は、\(\lim_{x \to 1}\frac{{(x^{2} - 1)}}{{(x - 1)}}\)は、2となります。

sage入力:

limit((x^2 - 1)/(x - 1), x=1)

2

もう一つ0で不連続な関数\(\frac{x}{sin(x)}\)をグラフにしてみます。 sage入力:

plot(sin(x)/x, x, -100, 100)

sage0-6.png

場合分けのグラフ

以下のような場合分けのグラフを表示する例を示します。

$$ f(x)=\left\{ \begin{array}{l l} x^2, & 0 \le x \le 1 \\ 2 -x , & 1 \lt x \le 2 \\ x^2-3x+2& 2 \lt x \le 3 \\ \end{array} \right. $$

sage入力:

p1 = plot(x^2, x, 0, 1)
p2 = plot(-x+2, x, 1, 2)
p3 = plot(x^2-3*x+2, x, 2, 3)
pt1 = point((0, 0), rgbcolor='black', pointsize=30)
pt2 = point((3, 2), rgbcolor='black', pointsize=30)
(p1+p2+p3+pt1+pt2).show(xmin=0, xmax=3, ymin=0, ymax=2)

sage0-7.png

パラメトリック方程式の可視化

高校で習う運動力学で円運動がありますが、これを時間tをパラメータに表すと $$ x=cos(t), y=sin(t) $$ となります。\(x,y\)を時間\(t\)をパラメータでので、媒介変数表示と呼ぶそうです。

媒介変数表示を行う関数が、parametric_plot関数です。

parametric_plot([座標を示す関数リスト], (パラメータ名, パラメータの最小値, 最大値), オプション]

の形式で使います。 例)単位円上の円運動を媒介変数表示で表します。

sage入力:

var('t')
parametric_plot([cos(t),sin(t)],[t,0,2*pi], aspect_ratio=1)

sage0-8.png

リストプロット

リスト([]で括られた値のリスト)をプロットするlist_plotの例を示します。

list_plot(プロットするリスト)

sage入力:

list_plot([1, 2, 4, 3, 6])

sage0-9.png

関係式の値をプロット

これまでのプロットは、プロットする値を明示的に示すものですが、値を示す代わりに関係式で示された値をプロットする関数がimplicit_plotです。 例として、\(x^2+y^2=1\)をプロットしてみます。

sage入力:

implicit_plot(x^2 + y^2 == 1, [x, -1, 1], [y, -1, 1], aspect_ratio=1)

sage0-10.png

3次元グラフ

2次元グラフと同様に3次元のグラフを表示することができます。 表示された図形はマウスで自由に回転することができます。(驚きました)

sage入力:

x, y = var('x y')
plot3d(sin(x*y),(x,-pi,pi),(y,-pi,pi), mesh=True)

sage0-11.png

等高線グラフ

前のグラフと同じものを等高線グラフで表示すると以下のようになります。

sage入力:

var('x y')
contour_plot(sin(x*y), [x, -pi, pi], [y, -pi, pi], aspect_ratio=1)

sage0-12.png

3次元の媒介変数表示

3次元の媒介変数表示の例です。

$$ \begin{eqnarray} f_x &=& u v \\ f_y &=& u \\ f_z &=& v^2 \end{eqnarray} $$

を媒介変数表示したのが、以下のグラフです。

sage入力:

u, v = var('u v')
fx = u*v
fy = u
fz = v^2
parametric_plot3d([fx, fy, fz], (u, -1, 1), (v, -1, 1), frame=False, color="yellow")

sage0-13.png

コメント

選択肢 投票
おもしろかった 19  
そうでもない 1  
わかりずらい 2  

皆様のご意見、ご希望をお待ちしております。

  • 大変参考になりました。一つ質問なのですが、2次元または3次元の媒介変数表示の際に媒介変数u、vではなく、これらの媒介変数で表されるfx,fyなどの関数の上限、下限の設定の仕方があれば教えていただきたいです。 -- Geppo? 2012-03-13 (火) 17:10:15
  • 描画領域を指定するには、showの引数でxmin, xmax, ymin, ymax等で描画範囲を指定することができます。 2次元のパラメトリックプロットを例に説明します。-- 竹本 浩? 2012-03-13 (火) 19:21:48
    var('t')
    pt = parametric_plot([cos(t),sin(t)],[t,0,2*pi], aspect_ratio=1)
    pt.show(xmin=-0.5, xmax=0.8)
    

param2d_show.png


(Input image string)


添付ファイル: fileparam2d_show.png 620件 [詳細] filesage0-6.png 681件 [詳細] filesage0-7.png 679件 [詳細] filesage0-13.png 766件 [詳細] filesage0-12.png 686件 [詳細] filesage0-11.png 751件 [詳細] filesage0-10.png 712件 [詳細] filesage0-9.png 721件 [詳細] filesage0-8.png 728件 [詳細] filesage0-5.png 714件 [詳細] filesage0-4.png 774件 [詳細] fileGraphics.show.png 691件 [詳細] filesage0-3.png 678件 [詳細] filesage0-2.png 720件 [詳細] filesage0-1.png 731件 [詳細] filesage0.png 648件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-01 (木) 13:34:58 (143d)
SmartDoc