使用plt.figure(figsize)绘制Logistic Map轨道图时生成多幅图,如何修复?
问题原因与解决方法
你生成多幅图的核心原因是把创建画布的plt.figure(figsize=(5,5))放在了for r的循环内部——每次循环都会新建一个空白画布,对应200个r值就会生成200个独立图,自然和预期的单幅轨道图不符。
修正后的代码如下:
import numpy as np import matplotlib.pyplot as plt def f(x, r): return r*x*(1 - x); x0 = 0.8 n = np.arange(0,5000) # 把创建画布的代码移到循环外,只初始化一次画布 plt.figure(figsize=(8, 5)) # 可根据需求调整尺寸 for r in np.linspace(3.4, 4, 200): xi = np.zeros(np.shape(n)) xi[0] = x0 for i in n: if i != 0: xi[i] = f(xi[i - 1], r) y = xi[1000:5000] # 忽略暂态效应 plt.plot(r*np.ones(np.shape(y)), y, '.k', markersize=0.08) # 所有数据绘制完成后,统一设置标签和标题 plt.xlabel("r") plt.ylabel("x") plt.title("Orbit Diagram - Logistic Map") plt.show()
可选优化建议
- 内层循环可以简化写法,提升运行效率:
xi = np.zeros(len(n)) xi[0] = x0 for i in range(1, len(n)): xi[i] = f(xi[i-1], r) - 若觉得图中点过于密集,可减少
np.linspace(3.4,4,200)的点数(比如改成100),或适当调大markersize数值。
内容的提问来源于stack exchange,提问作者A. Mukherjee
相关产品推荐
相关产品推荐

