matplotlib对数刻度
参考:matplotlib logarithmic scale
在数据可视化中,对数刻度是一个常用的技巧,可以帮助我们更好地展示数据的变化趋势。matplotlib是一个功能强大的绘图库,支持对数刻度的使用。本文将介绍如何在matplotlib中使用对数刻度,以及一些常见的应用示例。
1. 对数刻度的基本设置
首先,我们需要导入matplotlib库,并创建一个简单的图形,然后对x或y轴进行对数刻度的设置。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.show()
Output:
2. 设置对数刻度的范围
有时候我们希望对数刻度的范围不是从最小值到最大值,而是自定义的范围。可以通过设置对数刻度的最小值和最大值来实现。
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') # 设置y轴为对数刻度
plt.ylim(0.1, 10) # 设置y轴对数刻度范围
plt.show()
Output:
3. 双对数坐标系
双对数坐标系是一种常见的用于展示数据特征的方式。可以通过设置x轴和y轴都为对数刻度来实现。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 100, 100)
y = np.linspace(1, 100, 100)
plt.plot(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.yscale('log') # 设置y轴为对数刻度
plt.show()
Output:
4. 对数刻度的刻度标签
在对数刻度下,刻度标签通常会显示为指数形式,可以通过设置刻度标签的格式来改变显示方式。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.gca().xaxis.set_major_formatter(plt.FuncFormatter(lambda x, _: '{:g}'.format(x))) # 设置刻度标签格式
plt.show()
Output:
5. 对数刻度的网格线
在对数坐标系下,网格线的显示也有一些特殊之处。可以通过设置网格线的样式和颜色来美化图形。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y = np.log(x)
plt.plot(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.grid(True, which='both', linestyle='--', color='gray') # 设置网格线样式和颜色
plt.show()
Output:
6. 对数刻度与散点图
对数刻度也可以应用在散点图中,帮助我们更好地展示数据点的分布情况。
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plt.scatter(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.yscale('log') # 设置y轴为对数刻度
plt.show()
Output:
7. 对数刻度与柱状图
在柱状图中使用对数刻度可以帮助我们更清晰地展示数据的分布情况。
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(1, 10)
y = np.random.randint(1, 100, 9)
plt.bar(x, y)
plt.yscale('log') # 设置y轴为对数刻度
plt.show()
Output:
8. 对数刻度的双坐标轴
有时候我们希望在同一个图中显示两个y轴,其中一个为对数刻度,可以通过设置双坐标轴来实现。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(1, 10, 100)
y1 = np.log(x)
y2 = np.exp(x)
fig, ax1 = plt.subplots()
ax1.plot(x, y1, 'r-')
ax1.set_ylabel('Logarithmic scale', color='r')
ax2 = ax1.twinx()
ax2.plot(x, y2, 'g-')
ax2.set_ylabel('Linear scale', color='g')
plt.show()
Output:
9. 对数刻度与非连续数据
如果数据不是连续的,而是离散的,也可以使用对数刻度来展示数据的变化。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 10, 100, 1000])
y = np.array([10, 100, 1000, 10000])
plt.plot(x, y)
plt.xscale('log') # 设置x轴为对数刻度
plt.show()
Output:
10. 对数刻度的应用场景
对数刻度在很多领域都有广泛的应用,比如天文学、地质学等。下面是一个展示地震震级和震中距离关系的示例。
import matplotlib.pyplot as plt
import numpy as np
magnitude = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
distance = np.array([1.0, 10.0, 100.0, 1000.0, 10000.0])
plt.plot(magnitude, distance)
plt.xscale('log') # 设置震级为对数刻度
plt.yscale('log') # 设置震中距离为对数刻度
plt.xlabel('Earthquake magnitude')
plt.ylabel('Epicentral distance (km)')
plt.show()
Output:
通过对数刻度的使用,我们可以更清晰地展示数据的变化趋势,帮助我们更好地理解数据的特征。