如何在 Matplotlib 中繪製對數軸

Suraj Joshi 2023年1月30日 2020年6月9日
  1. set_xscale()set_yscale() 函式
  2. semilogx()semilogy() 函式
  3. loglog() 函式
如何在 Matplotlib 中繪製對數軸

為了在 Matplotlib 中繪製半對數圖,我們使用 set_xscale()set_yscale()semilogx()semilogy() 函式。如果必須將兩個軸都設定為對數刻度,則可以使用 loglog() 函式。

set_xscale()set_yscale() 函式

我們使用 set_xscale()set_yscale() 函式分別設定 X 軸和 Y 軸的縮放比例。如果我們在函式中使用 logsymlog 比例尺,則將各個軸繪製為對數比例尺。使用帶有 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()

輸出:

使用 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() 設定 basexbasey 引數。

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 軸的對數底數由 basexbasey 引數設定。

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

輸出:

使用對數函式在兩個軸上用對數標度繪製

Author: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

相關文章 - Matplotlib Axes