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

Python使用matplotlib绘图报错:'module' object is not callable求协助

解决 'module' object is not callable 错误及代码修复

我帮你梳理下代码里的问题,一步步解决这个错误:

1. 核心错误:未定义的变量调用

你代码里定义的模型变量是model,但调用优化时写了model_mixo.optimize()——这个model_mixo既没定义,若它是个模块的话,就会触发'module' object is not callable的错误。直接把这里改成model.optimize()就能解决这个核心问题。

2. Matplotlib 绘图调用错误

plt('fluxes','NH4_exchange')这行完全写错了:plt是matplotlib的模块,不能直接当作函数调用。你需要用plt.plot()来绘制曲线,而且要注意轴的顺序——你想展示NH4交换量(参数)变化时通量的变化,应该把NH4_exchange作为x轴,fluxes作为y轴。

3. 其他细节优化

  • solution.f这行只是访问了目标函数值,但没有实际作用,建议改成solution.objective_value(COBRApy官方推荐的属性名,可读性更强)。
  • 用索引model.reactions[15]定位反应不够健壮,最好后续换成反应ID(比如model.reactions.get_by_id("你的反应ID")),避免模型反应顺序变化导致代码失效。

修正后的完整代码

import cobra
import os
from os.path import join
import matplotlib.pyplot as plt

data_dir = '/Users/stephenchapman/Documents/research/FBA_algae_digesate/COBRApy/iCZ843/iCZ843_models'
# 读取模型
model = cobra.io.read_sbml_model(join(data_dir, "iCZ843_mixo.xml"))
# 初始化存储列表
NH4_exchange = []
fluxes = []

for i in range(0, 100, 10):
    # 定位目标反应并修改上下界
    target_reaction = model.reactions[15]
    target_reaction.lower_bound = -i
    target_reaction.upper_bound = -i
    # 优化模型(修正变量名)
    solution = model.optimize()
    # 存储目标通量值
    fluxes.append(solution.objective_value)
    # 存储当前NH4交换量(用正数更直观)
    NH4_exchange.append(i)

# 绘制曲线(修正绘图函数)
plt.plot(NH4_exchange, fluxes)
# 添加标签和标题,让图表更清晰
plt.xlabel('NH4 Exchange Rate')
plt.ylabel('Objective Flux')
plt.title('Flux vs NH4 Exchange Rate')
# 显示图像
plt.show()

额外小提示

如果循环结束后需要恢复模型的原始状态,可以在循环前先保存目标反应的初始上下界:

original_lb = model.reactions[15].lower_bound
original_ub = model.reactions[15].upper_bound

循环结束后再赋值回去即可。

内容的提问来源于stack exchange,提问作者Stephen Chapman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:07:50