我对matplotlib中的show()方法有疑问。我有一个for循环(对于肽),在这个循环中我有另一个循环(对于TFE)。在for TFE循环中,我绘制了2个不同的数字,在退出TFE循环后,我想绘制第三个数字。问题是,如果我在绘制第二个数字后绘制plt.show()(而不是像下面的代码中的fig1.show()和fig2。show()),它也会向我显示空的第三个数字(已创建)在第一个肽步骤之后,在环之前,但在它们之后绘制)。此外,每个肽步骤仅绘制图3中的一个图,因为它似乎显示()清除了先前在图(3)上完成的工作。我希望在每个肽步骤中绘制图形(3),但是它在前面的步骤中保留了绘图(并且没有被plt.show()破坏)并且仅在最后显示。
我想使用fig1.show()和fig2.show()但是当我在第一个TFE循环中关闭2个数字中的一个时,图(3)显示正确,只有TFE循环的其他数字出现未显示,以下内容显示在终端中: 无效的命令名称“139620086899400idle_draw” 执行时 “139620086899400idle_draw” (“后”剧本)
您能否对我提到的无效命令名称有所了解,我该怎么做才能解决问题?我没有粘贴整个代码,因为它很长而且很乱,但我认为它足以理解一个问题。
编辑:好的,我创建了最少的代码,我的问题是:fig1和fig2显示每个肽步骤的图表(执行代码时,每个步骤的图表都添加了图表)。我想要fig3,它按预期返回,但对于fig1和fig2,我实际上想要每个肽步骤2个数字,所以我有fig1和fig2数字的肽数和1 fig3数字。
import matplotlib.pyplot as plt
from scipy import stats
fig3 = plt.figure(3)
dictionary = {"peptide1": {5: {"deltaG": -15.5, "Fhteor": [0.9, 0.88], "T": [40, 45]}, 10: {"deltaG": -14.5, "Fhteor": [0.85, 0.83], "T": [40, 45]}},
"peptide666":{5: {"deltaG": -5.5, "Fhteor": [0.6, 0.57], "T": [40, 45]}, 10: {"deltaG": 1, "Fhteor": [0.4, 0.33], "T": [40, 45]}}}
for peptide in dictionary:
TFE_list = []
dG_list = []
fig1 = plt.figure(1)
fig2 = plt.figure(2)
for TFE in dictionary[peptide]:
plt.figure(1)
plt.plot(TFE, dictionary[peptide][TFE]["deltaG"], marker = "o") #plotting on fig1
plt.figure(2)
plt.plot(dictionary[peptide][TFE]["T"], dictionary[peptide][TFE]["Fhteor"], marker = "v") #plotting on fig2
if TFE <= 15:
TFE_list.append(TFE)
dG_list.append(dictionary[peptide][TFE]["deltaG"])
plt.figure(1)
lr = stats.linregress(TFE_list, dG_list)
y_list = [lr.intercept + i*lr.slope for i in TFE_list]
plt.plot(TFE_list, y_list) #plotting linear regression on plot 1
fig1.show()
fig2.show()
plt.figure(3)
plt.plot(len(peptide), len(peptide)*3, marker ="o") #plotting some characteristics derived from "for TFE loop" on fig3
plt.show()
答案 0 :(得分:1)
在fig1.close()
之后立即添加fig1.show()
时会发生什么?
另外,我非常肯定将plt.figure(2)
放在for循环中会导致问题,更不用说你在for循环之外声明变量fig2 = plt.figure(2)
的事实了在循环中也称为plt.figure(2)
。自从我使用matplotlib以来已经有一段时间但是我不认为你应该在for循环中放置一个plt.figure()
,除非你循环多个数字,即:
for i in range(len(all_figures_to_be_plotted)):
plt.figure(i)
答案 1 :(得分:0)
问题在于启动图(1)和图(2)。它们是在第一步中启动的,但是在下一步中它们被调用并且绘图被叠加。答案是正确的启动,例如:
for dictionary in dictionary: fig1 = plt.figure(peptide + str(1)) fig2 = plt.figure(peptide + str(2))
str(1)和str(2)旨在区分这两个图。 Stil不知道消息是什么:&#34; 139620086899400idle_draw&#34;执行&#34; 139620086899400idle_draw&#34; (&#34;在&#34;脚本之后)意味着,但在那时它不再重要。