Matplotlib で対数軸をプロットする方法

Suraj Joshi 2023年1月30日
  1. set_xscale() または set_yscale() 関数
  2. semilogx() または semilogy() 関数
  3. loglog() 関数
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()

出力:

scalex()関数を使用して Matplotlib で対数軸をプロットする

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()

出力:

scaley()関数を使用して Matplotlib で対数軸をプロットする

両方の軸に沿って対数値を設定するには、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()

出力:

関数 scalex と関数 scaley を使用して、両方の軸に対数スケールでプロットする

ここで、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()

出力:

semilogx()関数を使用して Matplotlib の対数軸をプロットする

両方の軸に沿って対数値を設定するには、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()

出力:

semilogx 関数と semilogy 関数を使用して、両方の軸に対数スケールでプロットする

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()

出力:

関数 loglog を使用して、両方の軸に対数目盛でプロットする

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

関連記事 - Matplotlib Axes