Matplotlib对数尺度
参考:matplotlib logarithmic scale
Matplotlib是一个常用的Python绘图库,用于创建各种类型的图表。在Matplotlib中,我们可以使用对数尺度来展示数据,尤其是当我们的数据跨度比较大时,对数尺度可以更好地展示数据的变化趋势。本文将介绍如何在Matplotlib中使用对数尺度,包括如何在轴上应用对数尺度、如何绘制对数坐标系图等内容。
1. 使用对数尺度绘制线性图
在Matplotlib中,我们可以使用set_xscale
和set_yscale
方法来将坐标轴设置为对数尺度。下面是一个简单的示例代码,展示如何使用对数尺度绘制一条线性图:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.yscale('log')
plt.show()
Output:
在上面的示例代码中,我们首先生成1到10之间的100个数据点作为x轴数据,然后计算它们的对数作为y轴数据,最后使用plt.yscale('log')
将y轴设置为对数尺度。运行代码后,我们可以看到绘制出的线性图在y轴上是对数尺度。
2. 使用对数尺度绘制散点图
除了线性图之外,我们也可以使用对数尺度绘制散点图。下面是一个示例代码,展示如何使用对数尺度绘制一组数据的散点图:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = np.exp(x)
plt.scatter(x, y)
plt.xscale('log')
plt.show()
Output:
在上面的示例代码中,我们生成1到100之间的100个数据点作为x轴数据,然后计算它们的指数作为y轴数据,最后使用plt.xscale('log')
将x轴设置为对数尺度。运行代码后,我们可以看到绘制出的散点图在x轴上是对数尺度。
3. 绘制对数坐标系图
在Matplotlib中,我们还可以绘制对数坐标系图,即同时使用对数尺度绘制x轴和y轴。下面是一个示例代码,展示如何绘制一个对数坐标系图:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = np.exp(x)
plt.plot(x, y)
plt.xscale('log')
plt.yscale('log')
plt.show()
Output:
在上面的示例代码中,我们生成1到100之间的100个数据点作为x轴数据,然后计算它们的指数作为y轴数据,最后分别使用plt.xscale('log')
和plt.yscale('log')
将x轴和y轴都设置为对数尺度。运行代码后,我们可以看到绘制出的图在x轴和y轴上都是对数尺度。
4. 对数尺度的另一种用法
在实际情况中,有时我们希望对数尺度只作用于其中一个轴。下面是一个示例代码,展示如何将对数尺度应用于y轴而保持x轴线性:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = np.exp(x)
plt.plot(x, y)
plt.yscale('log')
plt.show()
Output:
在上面的示例代码中,我们生成1到100之间的100个数据点作为x轴数据,然后计算它们的指数作为y轴数据,最后使用plt.yscale('log')
将y轴设置为对数尺度。运行代码后,我们可以看到绘制出的图在y轴上是对数尺度,而x轴保持线性。
5. 对数刻度的自定义
在Matplotlib中,我们可以对对数刻度进行自定义,包括添加主要刻度和次要刻度。下面是一个示例代码,展示如何对对数刻度进行自定义:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = np.exp(x)
plt.plot(x, y)
plt.yscale('log')
plt.minorticks_on()
plt.grid(True, which='both')
plt.show()
Output:
在上面的示例代码中,我们生成1到100之间的100个数据点作为x轴数据,然后计算它们的指数作为y轴数据,最后使用plt.yscale('log')
将y轴设置为对数尺度,并使用plt.minorticks_on()
和plt.grid(True, which='both')
添加次要刻度和网格线。运行代码后,我们可以看到绘制出的图上有主要刻度和次要刻度以及网格线。
6. 多图绘制
在Matplotlib中,我们可以绘制多个图形,并将它们显示在同一个画布上。下面是一个示例代码,展示如何在同一个画布上绘制多个图形:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y1 = np.log(x)
y2 = np.log(x) + 1
y3 = np.log(x) + 2
plt.figure(figsize=(10, 6))
plt.plot(x, y1, label='log(x)')
plt.plot(x, y2, label='log(x) + 1')
plt.plot(x, y3, label='log(x) + 2')
plt.legend()
plt.show()
Output:
在上面的示例代码中,我们生成1到10之间的100个数据点作为x轴数据,然后计算它们的对数以及加1和加2作为y轴数据,最后使用plt.figure(figsize=(10, 6))
创建一个大小为10×6的画布,并分别绘制三条线性图,并使用plt.legend()
添加图例。运行代码后,我们可以看到绘制出的三条线性图在同一个画布上显示。
7. 对数坐标轴范围调整
在Matplotlib中,我们可以调整对数坐标轴的范围,使图形更加清晰明了。下面是一个示例代码,展示如何调整对数坐标轴的范围:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.yscale('log')
plt.xlim(1, 10)
plt.ylim(0, 2)
plt.show()
在上面的示例代码中,我们生成1到10之间的100个数据点做为x轴数据,然后计算对数作为y轴数据,最后使用plt.xlim(1, 10)
和plt.ylim(0, 2)
分别调整x轴和y轴的范围,使图形更加清晰。运行代码后,我们可以看到绘制出的线性图在对数坐标轴上的范围被调整。
8. 对数刻度的标签格式
在Matplotlib中,我们还可以自定义对数刻度的标签格式,包括刻度的显示方式和精度。下面是一个示例代码,展示如何自定义对数刻度的标签格式:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.yscale('log')
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: '{:.0f}'.format(x)))
plt.show()
Output:
在上面的示例代码中,我们生成1到10之间的100个数据点作为x轴数据,然后计算对数作为y轴数据,最后使用plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: '{:.0f}'.format(x)))
将y轴的主要刻度标签显示为整数形式。运行代码后,我们可以看到绘制出的线性图上y轴的刻度标签为整数形式。
9. 对数尺度与其他坐标系组合
在Matplotlib中,我们还可以将对数尺度与其他类型的坐标系进行组合,比如将对数尺度与极坐标系相结合。下面是一个示例代码,展示如何在Matplotlib中绘制对数极坐标系图:
import matplotlib.pyplot as plt
import numpy as np
r = np.linspace(0.1, 10, 100)
theta = np.log(np.linspace(1, 10, 100))
plt.subplot(111, polar=True)
plt.plot(theta, r)
plt.show()
Output:
在上面的示例代码中,我们首先生成0.1到10之间的100个数据点作为极坐标系图的半径数据,然后计算1到10之间的100个数据点的对数作为极坐标系图的角度数据,最后使用plt.subplot(111, polar=True)
创建极坐标系图,并绘制出对数极坐标系图。运行代码后,我们可以看到绘制出的对数极坐标系图。
10. 对数尺度在科学研究中的应用
在科学研究中,对数尺度常常被用来展示数据的变化趋势,特别是当数据的跨度非常大时。比如在天文学中,天体的尺度差异非常大,可以使用对数尺度来更好地展示。下面是一个示例代码,展示如何使用对数尺度绘制一个天文学上的数据图:
import matplotlib.pyplot as plt
import numpy as np
distances = [1, 10, 100, 1000, 10000]
brightness = [100, 50, 10, 5, 1]
plt.plot(distances, brightness)
plt.xscale('log')
plt.yscale('log')
plt.show()
Output:
在上面的示例代码中,我们假设distances
表示天体的距离,brightness
表示天体的亮度,然后使用对数尺度绘制这些数据,以展示它们之间的关系。运行代码后,我们可以看到绘制出的图展示了距离和亮度之间的对数关系。