同等の対象を
- gnuplot
- Maxima (
plot2d()
,draw2d()
) - Python の Matplotlib の
plt.***
,ax.***
- Python の SymPy Plotting Backends
- The Graphic Module
- Plot functions
でグラフにしてみるシリーズ。
2024.12.3 追加
2024.11.25 追加
Python でグラフ作成
SymPy Plotting Backends (SPB)
Python の SymPy 自身にもグラフ作成機能はありますが,SymPy Plotting Backends (SPB) は,言わばその機能拡張版に相当します。 SPB によるグラフ作成には,The Graphics Module による方法と,Plot functions による方法の2種類の方法があります。ドキュメントによると,The Graphics Module のほうがより直感的で簡単であり,異なったグラフを重ねて表示させることも簡単にできるのでオススメのようです。Plot functions による方法は今後はアップデートされないようです。
Matplotlib
Python の Matplotlib によるグラフ作成には,plt.***
という関数を使った plt (pyplot) 流(pyplot インターフェース)と,ax.***
という関数を使った ax 流(オブジェクト指向インターフェース)の2つの方法があります。
- Matplotlib でグラフ作成:ax 編
ax.***
のみを使ってグラフを作成する方法についてまとめています。 - Matplotlib でグラフ作成:plt 編
plt.***
のみを使ってグラフを作成する方法についてまとめています。
個人的感想:
ひととおりまとめてみた限りでは,ax.***
を使う ax 流のみできることは,
subplots()
で複数のグラフを描いて(重ねて表示するのではなくて)配置するmatplotlib.patches.*
を使ってax.add_patch()
する
なので,それ以外の細かな設定は全て ax 流でも plt 流でも(関数名は微妙に違う場合もあるが)基本的にできるようだ。ax 流を覚えておくと,SPB の The Graphic Module でもそのまま使えるのが便利といえば便利。
グラフ作成基本編
Maxima や SymPy にはコンピュータ代数(古い言葉でいえば数式処理)の機能もあるが,グラフ作成の機能に限ってコンパクトにまとめたページ。
- gnuplot によるグラフ作成基本編
- Maxima によるグラフ作成 plot2d 編
- Maxima によるグラフ作成 draw2d 編
- Python によるグラフ作成 SymPy Plotting Backends 編
- Matplotlib でグラフ作成
sin x と x のグラフを描く
「理工系の数学B」の授業で,$\displaystyle\lim_{x\rightarrow 0} \frac{\sin x}{x} = 1$ のイメージをもってもらおうと gnuplot でグラフを描いてみたが,今時の学生さんに gnuplot というのもなぁ… と思い直して,Maxima, Python (Matplotlib, SymPy) ではどう描くかなと調べてみたページ。
- 参考:gnuplot で sin x と x のグラフを描く
- 参考:Maxima で sin x と x のグラフを描く
- 参考:Python の Matplotlib で sin x と x のグラフを描く
- 参考:SymPy Plotting Backends で sin x と x のグラフを描く
参考:初等関数のグラフを描く
「理工系の数学B」の授業で初等関数の微分をコンプリートした後,初等関数それぞれの外形くらいはグラフで示しておこうと思って書いてみたページ。自分が慣れ親しんだ gnuplot, Maxima だけではなく,今時の学生さん向けに Python の Matplotlib や SymPy,さらには SymPy Plotting Backends ではどう描くかも示しておこうと思って書いたページ。
- 参考:gnuplot で初等関数のグラフを描く
- 参考:Maxima で初等関数のグラフを描く
- 参考:Matplotlib で初等関数のグラフを描く
- 参考:SymPy Plotting Backends で初等関数のグラフを描く
tan(x) などの不連続点をつながないグラフを描く
初等関数のグラフを描く際,$y=\tan x$ や $y=1/x$ などの不連続点を無造作に線でつなぐケースがあったので,不連続点を無造作に繋がないようなグラフの描き方をまとめてみた。
グラフの上下左右軸に主目盛・副目盛をつける
20世紀の大昔,サイエンティフィックなグラフというものは上下左右軸に目盛をつけるものだと偉い先生に教えられたことがある。その理由は,定規を水平または垂直に当ててグラフの曲線から数値を読み取るためだと言われて,妙に感心したことを覚えている。というわけで,上下左右軸に目盛をつけた,サイエンティフィックなグラフを描く例。
- gnuplot
- Maxima の plot2d()
- Maxima の draw2d()
- matplotlib.pyplot.plot()
- SymPy + SymPy Plotting Backends (SPB)
2曲線の描画範囲を個別に設定して plot/draw と塗りつぶし
しばらく前に,gnuplot で $x$ の描画範囲と表示範囲を独立に指定するにはどうするかを調べた際の備忘録として,他の Maxima や Python (Matplotlib, SymPy) ではどう指定するかも書いておこうと思って。また,「ケプラーの第1法則・第2法則のパラパラアニメ」の出来上がり例のように,面積速度一定の法則を視覚的に表すためには,一定時間間隔で惑星が掃く面積を塗りつぶして見せたらいいので,そのための塗りつぶしテクニックの基本として。
- gnuplot で2曲線の描画範囲を個別に設定して plot と塗りつぶし
- Maxima で2曲線の描画範囲を個別に設定して draw2d と塗りつぶし
- matplotlib.pyplot.plot で2曲線の描画範囲を個別に設定して plot と塗りつぶし
- SymPy Plotting Backends で2曲線の描画範囲を個別に設定して plot と塗りつぶし
正規分布をσごとに塗りわける
Wikipedia にある 標準正規分布がもつ確率密度関数のグラフ に触発されて,このグラフはどう描くのかなぁ… と試行錯誤した結果。
- gnuplot で正規分布をσごとに塗りわける
- Maxima で正規分布をσごとに塗りわける
- Python の Matplotlib で正規分布をσごとに塗りわける
- SymPy Plotting Backends で正規分布をσごとに塗りわける
電場ベクトルの方向場を描く
電磁気学の授業で,電荷密度から直接静電場を求めているので。
- gnuplot で電場ベクトルの方向場を描く
- Maxima で電場ベクトルの方向場を描く
- Matplotlib で電場ベクトルの方向場を描く
- SymPy Plotting Backends で電場ベクトルの方向場を描く
複数の曲線を一気にグラフにする例とオプション設定例
パラメータを変えて複数の曲線を一気にグラフにする例や,オプションの設定法について,まとめてみた。
- gnuplot で複数の曲線を一気にグラフにする例とオプション設定例
- Maxima で複数の曲線を一気にグラフにする例とオプション設定例
- Matplotlib で複数の曲線を一気にグラフにする例とオプション設定例
- SymPy Plotting Backends で複数の曲線を一気にグラフにする例とオプション設定例
螺旋(らせん)を立体的にグラデーションで描く
電磁気学の授業で,ソレノイドを流れる電流による磁場や,一様な静磁場中の荷電粒子の運動について話しているので。
本稿執筆時点では,SymPy Plotting Backends では3次元ベクトルが描けない,Matplotlib で3d plot の曲線にグラデーションをつけるやり方がわからない…
楕円や回転楕円体を描く
理工系の数学 B の授業で,楕円の周長や面積,回転楕円体の表面積や体積を求めているので。
参考
gnuplot
Maxima
SymPy Plotting Backends
- Welcome to Sympy Plotting Backends’s documentation!
- Davide-sd/sympy-plot-backends: An improved plotting module for SymPy
関連ページ
SymPy Plotting Backends を知る以前に作成していたページ。Maxima と SymPy については,コンピュータ代数(代数といっても微分とか積分とか)についても比較できるように同等内容でまとめておいた。
- gnuplot によるグラフ作成 – 弘前大学 Home Sweet Home
- Maxima-Jupyter による数式処理とグラフ作成 – 弘前大学 Home Sweet Home
- SymPy による数式処理とグラフ作成 – 弘前大学 Home Sweet Home
はじめてのプログラミングシリーズ。プログラミングといっても,書式設定や繰り返し処理といった基本的な部分はグラフを作成する際にも重宝するので,ちょくちょく参考にしている。
- はじめての gnuplot プログラミング- 弘前大学 Home Sweet Home
- はじめての Maxima プログラミング- 弘前大学 Home Sweet Home
- はじめての Python プログラミング- 弘前大学 Home Sweet Home
経緯ときっかけ
そもそも私(葛西)は Mathematica 1.1 の頃(20世紀の昔,今から30年以上も前の話)までは熱心な Mathematica のユーザであった。どんだけ熱心だったかというと,共済に借金をして私費を投じて NeXT station を買ったらついてきたこのユーザーズガイド(November 1991)をまだ持っているくらい。
Mathematica User’s Guide For NeXT Computers
そのうちに高額有料ソフトはおいそれと買えなくなり,その頃担当していた授業では gnuplot を使いはじめていました。本学では一時期 Mathematica のサイトライセンスも契約していたのですが,それも打ち切りになり,それを契機に Maxima を使いはじめました。あの頃は Mathematica でこうやるところは Maxima ではどうすればいいか,という視点で使用法のまとめをしていたものですが,今となっては,もうすっかり Mathematica は使い方も忘れてしまいました。
なので,グラフ作成はまず gnuplot で描き,コンピュータ代数は Maxima で,そのついでに Maxima の plot2d()
とかでグラフを描く内容の授業をやったりしていましたが,最近は Maxima の plot2d 系からdraw 系に統一した授業内容に変更しようかなぁ… と思っていたところです。
gnuplot からはじめた身にとっては,Python の Matplotlib(MATLAB系?)はなかなか馴染めずにいたわけですが,SymPy では symbolic な関数のグラフしか描けず,数値リストからグラフが描けないという致命的欠陥のために,しかたなく Matplotlib も授業で使うことにしていました。
しかし,最近 SymPy Plotting Backends を知りまして,これはいわば SymPy の機能拡張版とでもいうべきパッケージで,SymPy 的に関数のプロットが plot()
でできるだけでなく,数値データのリストも plot_list()
でグラフにでき,なかなかおもしろそうです。
というわけで,授業内容を Maxima から Python (+ SymPy + SymPy Plotting Backends + etc.) を使ったものに移行していこうかなぁ… と思っているところです。