You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用两个独立滑块绘制交互式双函数图像?

朗缪尔二元混合物等温线交互式绘图解决方案

原代码问题分析

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:25:27