【備忘】sympyのtips(グラフを合成する)

sympyのtips備忘録

グラフを合成するやり方はあまりググっても出てこなかったのでメモ

参考:微分と積分ってなに? (概念理解とsympy)
参考:sympyを使って微分積分した結果をグラフにplotする

グラフを合成するには、「extend」を使う

  p4.extend(p3)   # p4のグラフにp3のグラフを合成

以下は例

元の線だけのグラフに

各三角を合成すると(上段)、下段のようになる

% cat extend_work.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sympy as sp

if __name__ == '__main__':
  x,y = sp.symbols('x,y')   # 変数定義
  f_org = x * 2   # 「x *2」の式を「f_org」とおく
  f_inpl_1 = sp.And(2 * x > y, x < 10)   # xが10までの面積を「f_inpl_1」とおく
  f_inpl_2 = sp.And(2 * x > y, x < 20)   # xが20までの面積を「f_inpl_2」とおく
  f_inpl_3 = sp.And(2 * x > y, x < 30)   # xが30までの面積を「f_inpl_3」とおく

  # 「function」のグラフ作成
  p1 = sp.plot(f_org, (x,0,30), lylim = [0,90], show = False, xlabel = "time", ylabel = "speed")
  p2 = sp.plot_implicit(f_inpl_1, (x,0,30), (y,0,90), show = False, xlabel = "time", ylabel = "speed", line_color = "blue")
  p3 = sp.plot_implicit(f_inpl_2, (x,0,30), (y,0,90), show = False, xlabel = "time", ylabel = "speed", line_color = "deepskyblue")
  p4 = sp.plot_implicit(f_inpl_3, (x,0,30), (y,0,90), legend = True, show = False, xlabel = "time", ylabel = "speed", line_color = "lightblue", title = "function")

  p1.extend(p4)   # p4のグラフにp3のグラフを合成
  p1.extend(p3)   # p4のグラフにp2のグラフを合成
  p1.extend(p2)   # p4のグラフにp1のグラフを合成

  # グラフ表示
  p = sp.plotting.PlotGrid(2, 3, p2, p3, p4, p1, legend = True, show = False)
  p.show()