Loading [MathJax]/extensions/tex2jax.js

2022年6月11日土曜日

matplotlibで一次関数グラフを作る

前回、matplotlibで方眼紙の様な正方形グリッドが作れたら、数学の関数グラフも容易に作れます。

matplotlibはデータをプロットするライブラリなので式をそのままグラフにするのはひと工夫必要です。

今度はオブジェクト指向で関数グラフを作り、一次関数をプロットします。


  1. # オブジェクト指向でグラフ作成  
  2. fig = plt.figure()  
  3. ax = fig.add_subplot(111)  
  4.    
  5. # これで正方形になります。  
  6. ax.set_aspect('equal', adjustable='box')  
  7.   
  8. # 表示する幅  
  9. ax.set_xlim(-1011)  
  10. ax.set_ylim(-1011)  
  11.   
  12. # グラフの刻み  
  13. ax.set_xticks(np.arange(-10105))  
  14. ax.set_yticks(np.arange(-10105))  
  15.    
  16. # 補助線をonにします  
  17. ax.minorticks_on()   
  18.   
  19. # グリッドの主線と補助線  
  20. ax.grid(which="major", color="black", alpha=0.5)  
  21. ax.grid(which="minor", color="gray", linestyle="--", alpha=0.5)  
  22.   
  23. # 数値表示を0に合わせます。  
  24. ax.spines['bottom'].set_position("zero")  
  25. ax.spines['left'].set_position("zero")  
  26.    

今回はオブジェクト指向のプロットなので若干書き方が違います。特に正方形にするには set_aspect('equal', adjustable='box')という指定をします。 またグラフの数値を0に合わせるため、spines.set_position 関数で zero を指定します。

関数グラフの方眼紙が出来たら、後は一次関数のデータを生成する関数を作ればいいだけ。

  1. # 一次関数のデータを作る関数   
  2. def linear(a, b, ran=np.arange(-10,10)):  
  3.   
  4.     arr = []  
  5.     for x in ran:  
  6.         y = x*a + b  
  7.         arr.append(y)  
  8.   
  9.     # 式から配列データを返します。  
  10.     return arr  
これを応用すれば二次関数や他の関数もプロットできますね。


[完成形]
  1. #! /usr/bin/env python  
  2.   
  3. # -*- coding:utf-8 -*-  
  4.    
  5.    
  6. import numpy as np  
  7. import matplotlib.pyplot as plt  
  8.   
  9.   
  10. # 一次関数のデータを作る関数   
  11. def linear(a, b, ran=np.arange(-10,10)):  
  12.   
  13.     arr = []  
  14.     for x in ran:  
  15.         y = x*a + b  
  16.         arr.append(y)  
  17.   
  18.     # 式から配列データを返します。  
  19.     return arr  
  20.   
  21. fig = plt.figure()  
  22. ax = fig.add_subplot(111)  
  23.    
  24. # これで正方形になります。  
  25. ax.set_aspect('equal', adjustable='box')  
  26.   
  27. # 表示する幅  
  28. ax.set_xlim(-1011)  
  29. ax.set_ylim(-1011)  
  30.   
  31. # グラフの刻み  
  32. ax.set_xticks(np.arange(-10105))  
  33. ax.set_yticks(np.arange(-10105))  
  34.    
  35. # 補助線をonにします  
  36. ax.minorticks_on()   
  37.   
  38. # グリッドの主線と補助線  
  39. ax.grid(which="major", color="black", alpha=0.5)  
  40. ax.grid(which="minor", color="gray", linestyle="--", alpha=0.5)  
  41.   
  42. # 数値表示を0に合わせます。  
  43. ax.spines['bottom'].set_position("zero")  
  44. ax.spines['left'].set_position("zero")  
  45.   
  46. x = np.arange(-1010)  
  47.   
  48. # y = 2x + 3の一次関数を生成  
  49. y = linear(23, x)  
  50. ax.plot(x, y)  
  51.   
  52.   
  53. plt.show()  

0 件のコメント:

コメントを投稿

Pythonで地図空間データを扱う⑤

ベースの地図が出来た所で、他のデータを被せてみます。 国土地理院の  500mメッシュ別将来推計人口データ  を使用します。 同じく神奈川県のデータ  500m_mesh_suikei_2018_shape_14.zip をダウンロードします。 ベースの地図データと同じ場所に展開...