Python 在matplotlib中显示图形

Python 在matplotlib中显示图形,python,matplotlib,Python,Matplotlib,关于matplotlib中的show()方法,我有一个问题。我有一个for循环(用于肽),在这个循环中我有另一个循环(用于TFE)。在for TFE循环中,我在两个不同的图形上绘图,退出TFE循环后,我想在第三个图形上绘图。问题是,如果我在第二个图形上绘图后编写plt.show()(而不是像下面的代码中那样的fig1.show()和fig2.show()),它还会显示空的第三个图形(在循环之前创建,但在循环之后绘制)在第一个for peptide步骤之后。此外,每个for peptide步骤在图

关于matplotlib中的show()方法,我有一个问题。我有一个for循环(用于肽),在这个循环中我有另一个循环(用于TFE)。在for TFE循环中,我在两个不同的图形上绘图,退出TFE循环后,我想在第三个图形上绘图。问题是,如果我在第二个图形上绘图后编写plt.show()(而不是像下面的代码中那样的fig1.show()和fig2.show()),它还会显示空的第三个图形(在循环之前创建,但在循环之后绘制)在第一个for peptide步骤之后。此外,每个for peptide步骤在图3上仅绘制一个图,如图所示()清除了之前在图(3)上所做的工作。我希望在每个for peptide步骤中绘制图(3),但以一种保留在先前步骤中绘制的方式绘制(并且未被plt.show()分解),仅显示在最末端

我想使用fig1.show()和fig2.show(),但当我关闭第一个TFE循环中的两个图形中的一个时,图(3)正确显示,只是for TFE循环的其他图形没有显示,并且终端中显示以下图形: 无效的命令名“139620086899400idle\u draw” 执行时 “1396200086899400空闲\u绘图” (“后”字)

你能给我一些关于所提到的无效命令名的见解吗?我应该怎么做来克服这个问题?我没有粘贴整个代码,因为它很长,很凌乱,但我认为这足以理解一个问题

编辑:好的,我创建了最少的代码,我的问题是:图1和图2显示了每个肽步骤的图(在执行代码时,图被添加到每个步骤的图上).我希望图3的结果与预期一致,但对于图1和图2,我实际上希望每个肽步骤有两个图,所以我有图1和图2的肽数,以及图3的肽数

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()
导入matplotlib.pyplot作为plt
从scipy导入统计信息
图3=plt.图(3)
字典={“肽1”:{5:{“deltaG”:-15.5,“Fhteor”:[0.9,0.88],“T”:[40,45]},10:{“deltaG”:-14.5,“Fhteor”:[0.85,0.83],“T”:[40,45]},
“肽666”:{5:{“deltaG”:-5.5,“Fhteor”:[0.6,0.57],“T”:[40,45]},10:{“deltaG”:1,“Fhteor”:[0.4,0.33],“T”:[40,45]}
对于字典中的肽:
TFE_列表=[]
dG_列表=[]
图1=plt.图(1)
图2=plt.图(2)
对于字典中的TFE[肽]:
plt.图(1)
plt.plot(TFE,dictionary[peptide][TFE][deltaG],marker=“o”)#在图1上绘制
plt.图(2)
plt.plot(dictionary[peptide][TFE][“T”]、dictionary[peptide][TFE][“Fhteor”]、marker=“v”)#在图2上绘制

如果TFE在
fig1.show()之后立即添加
fig1.close()
会发生什么

另外,我相当确定将
plt.figure(2)
放在for循环内会导致问题,更不用说在for循环外声明变量
fig2=plt.figure(2)
,然后调用
plt.figure(2)
也在循环中。我已经有一段时间没有使用matplotlib了,但我认为您不应该将
plt.figure()放入for循环中,除非您在多个图形上循环,例如:

for i in range(len(all_figures_to_be_plotted)):
    plt.figure(i)

问题是图(1)和图(2)的启动。它们在第一步启动,但在下一步中,它们刚刚被调用并叠加绘图。答案是正确启动,例如:

对于字典中的肽: 图1=plt.图(肽+str(1)) 图2=plt.图(肽+str(2))


str(1)和str(2)用于区分这两个数字。在执行“139620086899400idle_-draw”(在“script”之后)时,我仍然不知道消息是什么:“139620086899400idle_-draw”意思是,但在这一点上,它不再重要。

A意味着显示特定的问题。当然,你不应该使用实际数据或完整的代码;只需要使用一些随机值。
plt.show通常意味着在脚本中只调用一次,以显示所有现有的数字。不幸的是,这个问题不允许这样做了解您在这里试图实现的具体目标,因此很难提供帮助。我不希望数字关闭,因为我希望每个步骤显示2个数字。但我还是尝试了,结果出现错误:“数字”对象没有属性“关闭”。要立即关闭,必须是plt.close()不过。@BenQuick对了,很抱歉。我对matplotlib有点生疏了。现在怎么样了?