如何在 Matplotlib 中繪製對數軸
Suraj Joshi
2023年1月30日
為了在 Matplotlib 中繪製半對數圖,我們使用 set_xscale()
或 set_yscale()
和 semilogx()
或 semilogy()
函式。如果必須將兩個軸都設定為對數刻度,則可以使用 loglog()
函式。
set_xscale()
或 set_yscale()
函式
我們使用 set_xscale()
或 set_yscale()
函式分別設定 X 軸和 Y 軸的縮放比例。如果我們在函式中使用 log
或 symlog
比例尺,則將各個軸繪製為對數比例尺。使用帶有 set_xscale()
或 set_yscale()
函式的 log
標尺僅允許正值,這是讓我們如何管理負值,而使用 symlog
標尺既接受正值又接受負值。
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()
輸出:
要設定沿 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()
輸出:
為了沿兩個軸設定對數值,我們同時使用了 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()
輸出:
要沿兩個軸設定對數值,我們可以同時使用 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
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn