Matplotlib で対数軸をプロットする方法
 
Matplotlib で片対数グラフを描画するには、set_xscale() または set_yscale() および semilogx() または semilogy() 関数を使用します。両方の軸を対数スケールで設定する必要がある場合は、loglog() 関数を使用します。
set_xscale() または set_yscale() 関数
    
X 軸と Y 軸のスケーリングをそれぞれ設定するには、set_xscale() 関数または set_yscale() 関数を使用します。関数で log または symlog スケールを使用する場合、それぞれの軸は対数スケールとしてプロットされます。set_xscale() または set_yscale() 関数で log スケールを使用すると、正の値のみが許可されます。
import pandas as pd
import matplotlib.pyplot as plt
date = ["28 April", "27 April", "26 April", "25 April", "24 April", "23 April"]
revenue = [2954222, 2878196, 2804796, 2719896, 2626321, 2544792]
company_data_df = pd.DataFrame({"date": date, "total_revenue": revenue})
company_data = company_data_df.sort_values(by=["total_revenue"])
fig = plt.figure(figsize=(8, 6))
plt.scatter(company_data["total_revenue"], company_data["date"])
plt.plot(company_data["total_revenue"], company_data["date"])
plt.xscale("log")
plt.xlabel("Total Revenue")
plt.ylabel("Date")
plt.title("Company Growth", fontsize=25)
plt.show()
出力:
-function.webp)
Y 軸に沿って対数軸を設定するには、yscale() 関数を使用して Y 軸のスケールを log に設定します。
import pandas as pd
import matplotlib.pyplot as plt
date = ["28 April", "27 April", "26 April", "25 April", "24 April", "23 April"]
revenue = [2954222, 2878196, 2804796, 2719896, 2626321, 2544792]
company_data_df = pd.DataFrame({"date": date, "total_revenue": revenue})
company_data = company_data_df.sort_values(by=["total_revenue"])
fig = plt.figure(figsize=(8, 6))
plt.scatter(company_data["date"], company_data["total_revenue"])
plt.plot(company_data["date"], company_data["total_revenue"])
plt.yscale("log")
plt.xlabel("Date")
plt.ylabel("Total Revenue")
plt.title("Company Growth", fontsize=25)
plt.show()
出力:
-function.webp)
両方の軸に沿って対数値を設定するには、xscale() 関数と yscale() 関数の両方を使用します。
import pandas as pd
import matplotlib.pyplot as plt
x = [10, 100, 1000, 10000, 100000]
y = [2, 4, 8, 16, 32]
fig = plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.plot(x, y)
plt.grid()
plt.xscale("log")
plt.yscale("log", basey=2)
plt.xlabel("x", fontsize=20)
plt.ylabel("y", fontsize=20)
plt.title("Plot with both log axes", fontsize=25)
plt.show()
出力:

ここで、basey = 2 は Y 軸に沿った 2 を底とする対数を表します。
semilogx() または semilogy() 関数
semilogx() 関数は、X 軸に沿った対数スケーリングでプロットを作成し、semilogy() 関数は、Y 軸に沿った対数スケーリングでプロットを作成します。対数のデフォルトの底は 10 ですが、底はそれぞれ関数 semilogx() および semilogy() の basex および basey パラメータで設定できます。
import pandas as pd
import matplotlib.pyplot as plt
date = ["28 April", "27 April", "26 April", "25 April", "24 April", "23 April"]
revenue = [2954222, 2878196, 2804796, 2719896, 2626321, 2544792]
company_data_df = pd.DataFrame({"date": date, "total_revenue": revenue})
company_data = company_data_df.sort_values(by=["total_revenue"])
fig = plt.figure(figsize=(8, 6))
plt.scatter(company_data["total_revenue"], company_data["date"])
plt.plot(company_data["total_revenue"], company_data["date"])
plt.semilogx()
plt.xlabel("Total Revenue")
plt.ylabel("Date")
plt.title("Company Growth", fontsize=25)
plt.show()
出力:
-function.webp)
両方の軸に沿って対数値を設定するには、semilogx() 関数と semilogy() 関数の両方を使用できます。
import pandas as pd
import matplotlib.pyplot as plt
x = [10, 100, 1000, 10000, 100000]
y = [2, 4, 8, 16, 32]
fig = plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.plot(x, y)
plt.grid()
plt.semilogx()
plt.semilogy(basey=2)
plt.xlabel("x", fontsize=20)
plt.ylabel("y", fontsize=20)
plt.title("Plot with both log axes", fontsize=25)
plt.show()
出力:

loglog() 関数
X 軸と Y 軸の両方に沿って対数スケーリングを行うには、loglog() 関数を使用することもできます。X 軸と Y 軸の対数の底は、basex パラメータと basey パラメータによって設定されます。
import pandas as pd
import matplotlib.pyplot as plt
x = [10, 100, 1000, 10000, 100000]
y = [2, 4, 8, 16, 32]
fig = plt.figure(figsize=(8, 6))
plt.scatter(x, y)
plt.plot(x, y)
plt.loglog(basex=10, basey=2)
plt.xlabel("x", fontsize=20)
plt.ylabel("y", fontsize=20)
plt.title("Plot with both log axes", fontsize=25)
plt.show()
出力:

Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn