如何用两个独立滑块绘制交互式双函数图像?
朗缪尔二元混合物等温线交互式绘图解决方案
原代码问题分析
return语句位于绘图代码之前,导致绘图逻辑永远无法执行- 两个函数独立绘图,无法在同一画布展示两条曲线
- 未正确渲染交互式组件
- 参数范围设置不合理(朗缪尔吸附常数应为正数,避免分母为0或无意义的曲线)
修正后的完整代码
%matplotlib inline from ipywidgets import interactive, FloatSlider import matplotlib.pyplot as plt import numpy as np # 生成x轴数据(对应浓度或分压) x = np.linspace(0, 10, num=100) def plot_isotherms(m, n, Ka, Kb, total_sites): # 朗缪尔二元吸附等温线核心公式(考虑竞争吸附) theta_A = (Ka * m * x) / (1 + Ka * m * x + Kb * n * x) theta_B = (Kb * n * x) / (1 + Ka * m * x + Kb * n * x) # 计算覆盖度(乘以总吸附位点) CovA = theta_A * total_sites CovB = theta_B * total_sites # 清空画布,避免重复绘图 plt.clf() plt.plot(x, CovA, label='组分A') plt.plot(x, CovB, label='组分B') plt.xlabel('浓度/分压') plt.ylabel('覆盖度') plt.title('朗缪尔二元混合物等温线') plt.legend() plt.grid(True) plt.show() # 创建交互式滑块,设置符合物理意义的参数范围 interactive_plot = interactive( plot_isotherms, m=FloatSlider(min=0.1, max=5.0, value=1.0, description='A浓度'), n=FloatSlider(min=0.1, max=5.0, value=1.0, description='B浓度'), Ka=FloatSlider(min=0.1, max=3.0, value=1.0, description='A吸附常数'), Kb=FloatSlider(min=0.1, max=3.0, value=1.0, description='B吸附常数'), total_sites=FloatSlider(min=0.5, max=2.0, value=1.0, description='总位点') ) # 显示交互式组件 interactive_plot
关键修改说明
- 合并绘图逻辑到单个函数,确保两条曲线在同一画布展示
- 使用二元朗缪尔等温线公式(原代码为单组分公式,未考虑竞争吸附)
- 用
FloatSlider自定义滑块的范围、初始值和描述,交互更直观 - 添加
plt.clf()清空画布,避免滑块调整时曲线重叠 - 参数范围设为正数,符合朗缪尔吸附的物理意义
- 补充坐标轴标签、标题、图例和网格,提升图表可读性
内容的提问来源于stack exchange,提问作者felipe
相关产品推荐
相关产品推荐

