自动调整 Matplotlib 中的 ylim 和 xlim
参考: Automatically Rescale ylim and xlim in Matplotlib
在数据可视化过程中,合理设置图表的 x 轴和 y 轴的显示范围(即 xlim 和 ylim)是非常重要的。Matplotlib 提供了多种方式来自动或手动调整这些范围,以便更好地展示数据的特征。本文将详细介绍如何在 Matplotlib 中自动调整 ylim 和 xlim,包括基本概念、应用场景以及具体的代码实现。
基本概念
在 Matplotlib 中,xlim
和 ylim
属性用于控制图表的水平和垂直显示范围。这两个属性可以是自动设置的,也可以手动指定。自动设置意味着 Matplotlib 会根据提供的数据自动选择最佳的显示范围。
自动调整的优势
- 数据适应性:自动调整可以确保所有的数据点都能被有效展示,不会有数据点因为超出设定范围而无法显示。
- 快速调整:在数据更新或变化时,自动调整能够快速反应,省去了手动调整的麻烦。
- 适用性广:适用于多种类型的数据和不同的数据规模。
示例代码
接下来,我们将通过一系列示例代码来展示如何在 Matplotlib 中自动调整 ylim 和 xlim。
示例 1:基本的自动调整
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100)
plt.plot(data)
plt.title("自动调整示例 - how2matplotlib.com")
plt.show()
Output:
示例 2:比较自动调整和非自动调整
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100)
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.plot(data)
plt.title("自动调整 - how2matplotlib.com")
plt.subplot(122)
plt.plot(data)
plt.xlim(0, 50) # 手动设置xlim
plt.ylim(-3, 3) # 手动设置ylim
plt.title("手动调整 - how2matplotlib.com")
plt.tight_layout()
plt.show()
Output:
示例 3:使用relim
和autoscale_view
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100)
plt.plot(data)
plt.title("调整前 - how2matplotlib.com")
plt.show()
plt.plot(data)
plt.relim() # 重新计算限制
plt.autoscale_view() # 根据数据更新视图
plt.title("调整后 - how2matplotlib.com")
plt.show()
示例 4:动态添加数据点
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
data = np.random.randn(100)
line, = ax.plot(data)
for i in range(100, 200):
new_data = np.random.randn(1)
data = np.append(data, new_data)
line.set_ydata(data)
ax.relim()
ax.autoscale_view()
plt.pause(0.05)
plt.title("动态数据调整 - how2matplotlib.com")
plt.show()
示例 5:结合使用 xlim 和 ylim
import matplotlib.pyplot as plt
import numpy as np
data_x = np.linspace(0, 10, 100)
data_y = np.sin(data_x)
plt.plot(data_x, data_y)
plt.xlim(0, 5) # 部分自动,部分手动
plt.ylim(auto=True)
plt.title("混合调整 - how2matplotlib.com")
plt.show()
Output:
示例 6:多子图自动调整
import matplotlib.pyplot as plt
import numpy as np
data1 = np.random.randn(100).cumsum()
data2 = np.random.randn(100).cumsum()
fig, axs = plt.subplots(2, 1, sharex=True)
axs[0].plot(data1)
axs[1].plot(data2)
plt.title("多子图自动调整 - how2matplotlib.com")
plt.show()
Output:
示例 7:使用set_xlim
和set_ylim
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100).cumsum()
plt.plot(data)
plt.gca().set_xlim(left=20, right=80) # 设置特定的范围
plt.gca().set_ylim(bottom=-20, top=20)
plt.title("设置特定范围 - how2matplotlib.com")
plt.show()
Output:
示例 8:更新数据后重新调整
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100)
plt.plot(data)
plt.title("更新前 - how2matplotlib.com")
plt.show()
# 更新数据
data = np.random.randn(100) * 20
plt.plot(data)
plt.relim()
plt.autoscale_view()
plt.title("更新后 - how2matplotlib.com")
plt.show()
示例 9:使用tight_layout
自动调整布局
import matplotlib.pyplot asplt
import numpy as np
data = np.random.randn(100)
plt.plot(data)
plt.tight_layout()
plt.title("使用 tight_layout - how2matplotlib.com")
plt.show()
示例 10:设置不同的自动调整策略
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(100)
plt.plot(data)
plt.autoscale(enable=True, axis='x', tight=True)
plt.title("自动调整策略 - how2matplotlib.com")
plt.show()
Output:
以上示例展示了在不同情况下如何使用 Matplotlib 的自动调整功能。通过这些示例,可以看出自动调整 xlim 和 ylim 是一个非常实用的功能,它可以帮助我们更好地展示数据,使图表更加清晰和易于理解。