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
相关产品推荐
相关产品推荐

