[Python] 対数関数グラフの書き方

プログラミング

こんにちは雪菜です。本日はpythonで対数関数グラフを書く方法についての記事を書きたいと思います。対数グラフの基本は以下の記事で確認してください。

numpyを用いる方法

numpyの対数関数に関するライブラリ一覧

結論から言うとpythonで対数関数グラフを書くときはnumpyの関数を使うことをおすすめします。numpyの対数関数に関する関数は以下です。

  • np.log(x) :底をe(ネイピア数=2.71828183…)とする対数(自然対数)
  • np.log2(x) :底を2とする対数
  • np.log10(x) :底を10とする対数(常用対数)
  • np.log1p(x): 底をeとするx+1の対数
    ㊟np.log1p(x)=np.log(x+1)だがx~0のときは(xが微小量)np.log1p(x)の方が高精度

これらの関数は引数、返り値どちらも配列になる。(これらの関数の特色というよりnumpyの特色)

底がe,2,10の場合

ソースコード:

import matplotlib.pyplot as plt
import numpy as np
#必要なライブラリを入れる
x = np.linspace(0,50,51)
#0から50まで51個の配列をつくる [0,1,2...,50]
y = np.log(x)
#それぞれのxに対応した自然対数の値 ㊟これもxと同じサイズの配列
plt.plot(x,y, color="blue")
#100個の点を折れ線グラフでつなぐ データー数が少ないと滑らかではなくなる
plt.text(30, 3, "$y=log_{e}x$", fontsize=20, color="blue")
#点(30.3)に位置にy=log_exと20サイズ色は青で書く
plt.show()
#グラフを表示
print(x,y)
#x,yがそれぞれ配列であることを確認する
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17.
 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.
 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.] [      -inf 0.         0.69314718 1.09861229 1.38629436 1.60943791
 1.79175947 1.94591015 2.07944154 2.19722458 2.30258509 2.39789527
 2.48490665 2.56494936 2.63905733 2.7080502  2.77258872 2.83321334
 2.89037176 2.94443898 2.99573227 3.04452244 3.09104245 3.13549422
 3.17805383 3.21887582 3.25809654 3.29583687 3.33220451 3.36729583
 3.40119738 3.4339872  3.4657359  3.49650756 3.52636052 3.55534806
 3.58351894 3.61091791 3.63758616 3.66356165 3.68887945 3.71357207
 3.73766962 3.76120012 3.78418963 3.80666249 3.8286414  3.8501476
 3.87120101 3.8918203  3.91202301]

outputの結果よりきちんとx,yのデータが同じサイズの配列になっていることがわかります。またグラムも正しく書けています。

同様に適切な関数を用いれば底を2,10にした場合のグラフも書くことができます。

任意の数を底にしたい場合

2,10,e以外を底にしたい場合は対応する関数がないので底の変換公式を用いることがグラフを書くことができます。

ソースコード:

import matplotlib.pyplot as plt
import numpy as np
#必要なライブラリを入れる
x = np.linspace(0,50,51)
#0から50まで51個の配列をつくる [0,1,2...,50]
y = np.log(x)/np.log(0.5)
#底の変換公式(底を0.5にした)
plt.plot(x,y, color="blue")
#51個の点を折れ線グラフでつなぐ データー数が少ないと滑らかではなくなる
plt.text(30, -4, "$y=log_{0.5}x$", fontsize=20, color="blue")
#点(30.-4)に位置にy=log_{0.5}xと20サイズ色は青で書く
plt.show()
#グラフを表示

mathを用いる方法

mathの対数関数に関するライブラリ一覧

結論から言うとmathの関数を用いて対数グラフを書くことは出来ません(適切ではありません)。
mathの対数関数に関する関数は以下です。

  • math.log() :自然対数
  • math.log10() :常用対数
  • math.log2() :底を2とする対数

これらの関数は引数、返り値に実数をとる。

使用例

import math
x=4
y=math.log2(x)
print(x,y)
4 2.0

同様に底をe,10の場合も計算できます。任意の数を底にしたい場合は先ほどと同様に底の変換公式を用いましょう。

上記のように一つの値を求めたいときには有効です。ただし配列ではないことに注意しましょう。

グラフを書こうとした際の失敗例

import matplotlib.pyplot as plt
import math 
import numpy as np

x = np.linspace(0,50,51)
y = math.log(x)
plt.plot(x,y)
plt.show()
  y = math.log(x)
TypeError: only size-1 arrays can be converted to Python scalars

エラー文はyがサイズが1(配列ではない)ので配列を引数にとるplt.plot()を用いることができないと出ています。したがってグラフを書く際はnumpyの関数を使いましょう。

タイトルとURLをコピーしました