経済学のグラフを描く、その3:交点に記号をつける

交点を自動で計算し、記号をつける

だいたい、経済学で必要な曲線は自由に書けるようになってきた。 あとは位相なんかで使う陰関数だけど、僕は使うことない。必要な方はこちらあたりを参照して、countourというコマンドの使いかたを覚えればよい。

さて、次は交点に記号をつける。

交点に記号がついていると、

「二つの線の交点のうち、点Aは低い方で、点Bは高い方です。点Aより左側では利潤がマイナスで右側ではプラスです。ただ、Bを越えると再びマイナスになりますね。・・・」

といった感じで説明ができて、とても分かりやすい。

交点に記号がついていないと、

「この線とこの線の交じわる点、ここ、が均衡になります。さらに無差別曲線と交じわる点は 二つあって、左側が。。。」

という感じで分からなくもないけど、だんだん混乱してきだします。講義なら、ポインタで指すこともできるけれど、文章での表現なら非常にまだるっこしい。

そんなわけで、きちんと記号をつけておくことにする。

図に記号を書くときの位置決めは、PowerPointなどを使って、手作業だと一発で決まる。 が、曲線をちょっと変更すると、すべてがずれてしまって、またやりなおしだ。

そこで、自動で記号の位置を計算して記入する。

自動での記号のつけかたは、以前やった方針でだいたい大丈夫だと思っていた。

y1とy2の上下関係が変わったら、その点が交点だと考えることにする。
(出所:「Matplotlibで交点にラベルを表示する - ときどきエコ」、https://blog.ecofirm.com/post/pythongraphintersections200429/  )

が、問題があった。 この方法では、上下関係が変わらなければ、交点と判定しない。 つまり、無差別曲線と予算線が接するばあいは、交点とみなしてくれない。

若干コードが複雑になるけれど、ここをちゃんとやっておけば、あとで楽になる。

方針

コードの後半は前回の「経済学のグラフを書く、その2:無差別曲線と予算線」と同じだ。 ただし、draw_intersection(ax, x1, y1, y2, figlabels)という行が増えている。 この行で交点の座標を記入する。 もちろん、この行だけでは座標の記入はできなくて、この行が呼びだすdraw_intersectionという関数が実際の処理を担当する。

交点かどうかの判定は、if_intersection(y1, y2, i)で行なう。

判定基準は次の3つだ。

  1. y座標が同じ
  2. y座標の上下が入れ変わる
  3. y座標が近づいていたが、また離れる。その一番近い距離が基準以下。

1と2は以前と同じだ。 今回追加したのは3の条件だ。 判定のために二つ前までのy座標を使う。

x=i点のy座標の差をdy[i]とするとき、2つ前dy[i-2]から1つ前dy[i-1]の差と1つ前dy[i-1]から現時点dy[i]の差の符号が逆転しているかどうかを判定する。

このとき、精度の関係で、dy[i]=0とはならないので、dy[i]が一定の基準以下であるばあいに、交点とする。 一定の基準というのは、だいたい試行錯誤して決めればいいけれど、0.001から0.0001ぐらいでよいと思う。 そもそも、x座標を0.01刻み以上ぐらいで作っている(useedによって異なる)ので、あまり小さくしても仕方がない。

交点がすごく多い図を書くケースが多ければ、figlabelsの文字を増やしておく。

<img src="https://blog.ecofirm.com/images/myfig0512-5.png" alt="" width="100%"/>

できた。

次は塗りつぶし

ここまでで、線で図を描き、必要な情報を記入できるようになった。

次は、複数の線で囲まれた領域などを塗りつぶせるようにする。

コメント

comments powered by Disqus