Python Pycharm和matplotlib仅在调试模式下工作

Python Pycharm和matplotlib仅在调试模式下工作,python,debugging,matplotlib,pycharm,Python,Debugging,Matplotlib,Pycharm,我在Pycharm 2017.3.3社区版中遇到了一个奇怪的问题。我正在做一个循环,应该在每个迭代中显示不同的图形。当我运行代码时,只显示第一个图,程序就卡住了。如果我在没有断点的调试模式下运行代码,也会发生同样的情况。但是,如果我设置了一个断点,并在程序到达断点时继续恢复程序,则会显示所有图形,并且程序会成功完成执行。我还想澄清一下,我以前使用的代码中的数字较少,结果很好 代码如下: import matplotlib.pyplot as plt import pandas as pd imp

我在Pycharm 2017.3.3社区版中遇到了一个奇怪的问题。我正在做一个循环,应该在每个迭代中显示不同的图形。当我运行代码时,只显示第一个图,程序就卡住了。如果我在没有断点的调试模式下运行代码,也会发生同样的情况。但是,如果我设置了一个断点,并在程序到达断点时继续恢复程序,则会显示所有图形,并且程序会成功完成执行。我还想澄清一下,我以前使用的代码中的数字较少,结果很好

代码如下:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from sklearn.externals import joblib

feat_file = 'C:\\Users\\DianaCarolina\\Google Drive\\Maestría\\datos\\indices_Diana\\all_type.xlsx'
sites = {"Bosque":['5256', '5260'], "Rastrojo": ['5253', '5255'], "Pastizal": ['5257', '7125']}
model=joblib.load("C:\\Users\\DianaCarolina\\Google Drive\\Maestría\\datos\\indices_Diana\\ecotyhmm13_3.pkl")
nclasses = 13
for comp in range(nclasses):
    histData = []
    types = []
    col = []
    for type in sites:
        df = pd.read_excel(feat_file, sheet_name=type, index_col=0)
        mdata=df.loc[df.iloc[:, 20] == comp, "Mes"]
        types.append(type)
        histData.append(mdata)

        if len(col) < 3:
            if type == "Bosque" and "green" not in col:
                col.append("green")
            elif type == "Rastrojo" and "orange" not in col:
                col.append("orange")
            elif type == "Pastizal" and "yellow" not in col:
                col.append("yellow")

    mclass = np.sum(np.array([model.gmms_[comp].weights_]).T * model.gmms_[comp].means_, 0)

    plt.figure()

    if not histData[0].empty or not histData[1].empty or not histData[2].empty:
        plt.subplot(2, 1, 1)
        n, bins, patches = plt.hist(histData, np.arange(0.5,13, 1), stacked=True, label= types, color = col, rwidth=0.8)
        plt.legend()
        plt.xticks(range(1,13), ("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", \
                                      "Septiembre", "Octubre", "Noviembre", "Diciembre"))
        plt.title("Clase "+str(comp+1)+" de "+str(nclasses))

        plt.subplot(2, 1, 2)

    plt.stem(mclass)
    plt.xticks(range(14), list(df.loc[:, "M":"Salida2_4"]))
    plt.title("Medias de características para la clase")
    plt.show()
导入matplotlib.pyplot作为plt
作为pd进口熊猫
将numpy作为np导入
从sklearn.externals导入作业库
feat_file='C:\\Users\\DianaCarolina\\Google Drive\\maestria\\datos\\index\u Diana\\all\u type.xlsx'
地点={“Bosque”:['5256','5260'],“Rastrojo”:['5253','5255'],“Pastizal”:['5257','7125']}
model=joblib.load(“C:\\Users\\DianaCarolina\\Google Drive\\maestria\\datos\\index\u Diana\\ecotyhmm13\u 3.pkl”)
nclasses=13
对于范围内的comp(nclasses):
histData=[]
类型=[]
col=[]
对于输入站点:
df=pd.read\u excel(专长文件,工作表名称=type,索引列=0)
mdata=df.loc[df.iloc[:,20]==comp,“Mes”]
类型。追加(类型)
histData.append(mdata)
如果len(col)<3:
如果类型==“Bosque”和“green”不在列中:
列附加(“绿色”)
elif类型==“Rastrojo”和“orange”不在列中:
col.append(“橙色”)
elif类型==“Pastizal”和“黄色”不在列中:
col.append(“黄色”)
mclass=np.sum(np.array([model.gmms_[comp].weights_]).T*model.gmms_[comp].表示0)
plt.图()
如果不是histData[0]。则为空或不是histData[1]。为空或不是histData[2]。为空:
plt.子地块(2,1,1)
n、 箱子,补丁=plt.hist(histData,np.arange(0.5,13,1),堆叠=真,标签=类型,颜色=颜色,宽度=0.8)
plt.legend()
plt.xticks(范围(1,13),(“Enero”、“Febrero”、“Marzo”、“Abril”、“Mayo”、“Junio”、“Julio”、“Agosto”\
“七分音符”、“八分音符”、“新音符”、“双音符”))
产品名称(“Clase”+str(comp+1)+“de”+str(nclasses))
plt.子地块(2,1,2)
plt.阀杆(mclass)
plt.xticks(范围(14),列表(df.loc[:,“M:”Salida2_4“]))
plt.title(“克拉斯河沿岸的卡拉茨河媒体”)
plt.show()
plt.show()
通常只应在代码末尾调用一次。这将显示已创建的所有图形,并将阻止其后任何代码的执行

例如

这将仅在关闭第一个图形后显示第二个图形


最简单的解决方案是取消缩进你的
plt.show()
,这样一旦创建了所有的数字,它们都会显示出来。

为了帮助你,我们需要你的循环语句显示多少次?@FrankAK它应该显示13个数字。你能把你的屏幕截图放在这里吗?如果你的代码很长,把它删减到a,因为这是得到好答案的最好方法
import matplotlib.pyplot as plt

for i in range(2):
    plt.figure()
    plt.plot([1,2,3])

    plt.show()