如何在 Matplotlib 中绘制等轴的正方形图

我们可以使用 set_aspect() 方法设置绘图的纵横比以使其成为正方形绘图,而 axis() 方法也可以用于在 Matplotlib 中制作具有相等轴的正方形绘图。

set_aspect() 绘制等轴方图

我们可以使用 matplotlib.axes.Axes.set_aspect() 函数设置长宽比。如果在函数中使用等于作为长宽比,则得到的图在 X 轴和 Y 轴上从数据点到绘图单位的缩放比例相同。

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y)
plt.xlim(-3,3)
plt.ylim(-3,3)
ax.set_aspect('equal', adjustable='box')
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

如何在 Matplotlib 中绘制等轴的正方形图

plt.xlim(-3,3)
plt.ylim(-3,3)
ax.set_aspect('equal')

它将 X 轴和 Y 轴设置为相同的范围。然后 ax.set_aspect('equal') 将两个轴设置为相等。

当两个轴的范围设置为相同时,上述方法仅产生一个正方形图。要在一般情况下生成正方形图,我们必须使用以下命令手动设置纵横比:

axes.set_aspect(1./axes.get_data_ratio())

axes.get_data_ratio() 获取原始绘图数据的比率。倒数的值传递给 set_aspect() 以使轴相等,而无需手动设置轴的限制。

代码:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-3,3,100)
y = np.sin(x)
fig = plt.figure()
ax = fig.add_subplot(111)
plt.plot(x, y)
ax.set_aspect(1.0/ax.get_data_ratio(), adjustable='box')
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

如何在 Matplotlib 中绘制等轴的正方形图

使用 axis() 方法生成正方形图

如果我们将 "square" 作为参数传递给 matplotlib.pyplot.axis(),则会创建一个正方形图其中两个轴所占的范围等于图中的长度。

import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-3,3,100)
y=np.sin(x)
plt.plot(x, y)
plt.axis('square')
plt.xlabel("x")
plt.ylabel("sinx")
plt.show()

如何在 Matplotlib 中绘制等轴的正方形图

Warning
此解决方案中的轴范围是自动选择的。它等于 ax.set_aspect('equal', adjustable='datalim')。不遵守用户设置的明确轴限制。

如何在 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()

输出:

如何在 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()

输出:

如何在 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()

输出:

如何在 Matplotlib 中绘制对数轴

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

输出:

如何在 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()

输出:

如何在 Matplotlib 中绘制对数轴

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

输出:

如何在 Matplotlib 中绘制对数轴