调用Matplotlib绘制p_n函数图像仅显示空白屏幕问题求助
问题原因
- 你代码中的
N为单个未定义的数值,plt.plot()需要传入一组连续的x值和对应的y值才能绘制出曲线,仅传入单个数值不会渲染可见图形,因此只会显示空白画布 - 未限定N的取值范围:当
N < 25时N-25为负数,阶乘计算会直接报错,也会导致绘图失败 - 自定义阶乘计算大数时容易出现数值溢出,会导致计算结果异常
解决方案
直接生成N的连续取值序列,遍历计算每个N对应的p_n值后再绘图即可,修复后完整代码如下:
import matplotlib.pyplot as plt def factorial(N): fact = 1 for num in range(2, N + 1): fact *= num return fact # 生成自变量N的取值范围:必须≥25,此处取25到100的整数,可根据需求调整范围 N_list = range(25, 101) p_n_list = [] for N in N_list: a = 1/(2**N) b = factorial(N) c = factorial(N-25) d = factorial(25) p_n = a * (b / (c * d)) p_n_list.append(p_n) plt.title("Factorial Graph") plt.xlabel("x axis") plt.ylabel("y axis") plt.plot(N_list, p_n_list, color="blue") plt.show()
可选优化
可以直接调用scipy.special.comb内置组合数函数代替自定义阶乘,计算效率更高且不会出现大数阶乘溢出问题,优化后代码如下:
import matplotlib.pyplot as plt from scipy.special import comb # 生成N的取值范围 N_list = range(25, 101) # 直接计算每个N对应的p_n值 p_n_list = [comb(N, 25) * (1/2)**N for N in N_list] plt.title("Factorial Graph") plt.xlabel("x axis") plt.ylabel("y axis") plt.plot(N_list, p_n_list, color="blue") plt.show()
内容的提问来源于stack exchange,提问作者SarahT
相关产品推荐
相关产品推荐

