Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 嵌套循环导致不需要的重复图形_Python_Pandas_For Loop_Matplotlib_Nested Loops - Fatal编程技术网

Python 嵌套循环导致不需要的重复图形

Python 嵌套循环导致不需要的重复图形,python,pandas,for-loop,matplotlib,nested-loops,Python,Pandas,For Loop,Matplotlib,Nested Loops,我知道以前有人问过这个问题,但我不知道如何用词来表达我的问题,以找到我想要的东西。我对编码还是相当陌生,正在尝试使用嵌套for循环生成绘图。我打算创建4个图,但每个图创建4次,总共16位数。是什么导致了重复 我已经查过了,但这是无关紧要的 这是我的密码: ###(this is sample data in case you are trying to recreate the code) df24avg=pd.dataframe({'pm10_3135_2018':[30,34,32,44,4

我知道以前有人问过这个问题,但我不知道如何用词来表达我的问题,以找到我想要的东西。我对编码还是相当陌生,正在尝试使用嵌套for循环生成绘图。我打算创建4个图,但每个图创建4次,总共16位数。是什么导致了重复

我已经查过了,但这是无关紧要的

这是我的密码:

###(this is sample data in case you are trying to recreate the code)
df24avg=pd.dataframe({'pm10_3135_2018':[30,34,32,44,45,46,59,54,59,30],
'nox_3135(ppb)':[20,29,27,31,33,14,34,23,32,31],
'CO_3135(ppm)':[0.8,0.9,0.1,0.2,0.5,0.5,0.7,0.9,0,9,0.3],
'O3_mda8_3135':[42,45,47,51,52,52,57,67,65,70],
'pm25_3135_2018':[6,7,6,7,4,5,2,11,9,18]})

x = [df24avg.pm10_3135_2018,df24avg['nox_3135(ppb)'],df24avg['CO_3135(ppm)'],df24avg.O3_mda8_3135]
y = df24avg.pm25_3135_2018
xlab = ["PM10 (ug/m^3)", "NOx (ppb)", "CO (ppm)", "O3 MDA8 (ppb)"]

for xcol in x:
    for lab in xlab:

        fig, ax = plt.subplots()
        ax = plt.gca()
        ax.plot(xcol, y, color='xkcd:red',linestyle='None',marker='o')
        ax.set_xlabel(lab,fontsize=15)
        ax.set_ylabel('PM2.5 (ug/m^3)',fontsize=15)
        ax.set_ylim(0,)
        ax.set_xlim(0,)
        #ax.set_title("{} vs {}".format(x1, ylab))
    
        #ax.legend(fontsize='medium', loc='lower right')
        fig.tight_layout()

我还想用我选择的不同名称保存每个图形,但不确定如何在循环中这样做,而不创建第三个循环。我也不反对创建另一个循环,只是为了避免重复数据的问题。谢谢大家!

如果我理解正确,您需要一个带有
zip的循环:

for xcol, lab in zip(x, xlab):
    fig, ax = plt.subplots()
    ax.plot(xcol, y, color='xkcd:red',linestyle='None',marker='o')
fnames = ['foo.png', 'bar.png', 'baz.png', 'grr.png']

for xcol, lab, fname in zip(x, xlab, fnames):
    ...
    plt.savefig(fname)
应删除
ax=plt.gca()
,因为
ax
已在
子批调用中确定

如果您有每个绘图的唯一文件名列表,只需将其添加到
zip

for xcol, lab in zip(x, xlab):
    fig, ax = plt.subplots()
    ax.plot(xcol, y, color='xkcd:red',linestyle='None',marker='o')
fnames = ['foo.png', 'bar.png', 'baz.png', 'grr.png']

for xcol, lab, fname in zip(x, xlab, fnames):
    ...
    plt.savefig(fname)

如果我理解正确,您需要一个带有
zip
的循环:

for xcol, lab in zip(x, xlab):
    fig, ax = plt.subplots()
    ax.plot(xcol, y, color='xkcd:red',linestyle='None',marker='o')
fnames = ['foo.png', 'bar.png', 'baz.png', 'grr.png']

for xcol, lab, fname in zip(x, xlab, fnames):
    ...
    plt.savefig(fname)
应删除
ax=plt.gca()
,因为
ax
已在
子批调用中确定

如果您有每个绘图的唯一文件名列表,只需将其添加到
zip

for xcol, lab in zip(x, xlab):
    fig, ax = plt.subplots()
    ax.plot(xcol, y, color='xkcd:red',linestyle='None',marker='o')
fnames = ['foo.png', 'bar.png', 'baz.png', 'grr.png']

for xcol, lab, fname in zip(x, xlab, fnames):
    ...
    plt.savefig(fname)
您可以使用
range(len())
函数,而不是直接使用值

for i in range(len(x)):
#    for lab in xlab: # you don't need this line
        fig, ax = plt.subplots()
        ax = plt.gca()
        ax.plot(x[i], y, color='xkcd:red',linestyle='None',marker='o') # Modified with index
        ax.set_xlabel(xlab[i],fontsize=15) # Also used index
        ax.set_ylabel('PM2.5 (ug/m^3)',fontsize=15)
        ax.set_ylim(0,)
        ax.set_xlim(0,)
        #ax.set_title("{} vs {}".format(x1, ylab))
    
        #ax.legend(fontsize='medium', loc='lower right')
        fig.tight_layout()
您可以使用
range(len())
函数,而不是直接使用值

for i in range(len(x)):
#    for lab in xlab: # you don't need this line
        fig, ax = plt.subplots()
        ax = plt.gca()
        ax.plot(x[i], y, color='xkcd:red',linestyle='None',marker='o') # Modified with index
        ax.set_xlabel(xlab[i],fontsize=15) # Also used index
        ax.set_ylabel('PM2.5 (ug/m^3)',fontsize=15)
        ax.set_ylim(0,)
        ax.set_xlim(0,)
        #ax.set_title("{} vs {}".format(x1, ylab))
    
        #ax.legend(fontsize='medium', loc='lower right')
        fig.tight_layout()

第一个猜测是双循环。你能用清晰的英语解释一下,将数据框分成四个部分进行绘图的标准是什么吗?你是在第二个循环中定义你的数字,所以这是16个数字。您可能希望在第一个循环中定义图形,使用第二个循环绘制4条线,然后在第二个循环之外设置轴特性(同样,因为只有一个打印…)。还可能需要颠倒循环的顺序。IIUC,一个循环:
对于xcol,zip中的实验室(x,xlab):
。此外,
ax=plt.gca()。如果您需要特定的文件名,请创建另一个列表,并将其添加到
zip
@BigBen这正是我所需要的,谢谢。首先猜测是双循环。你能用清晰的英语解释一下,将数据框分成四个部分进行绘图的标准是什么吗?你是在第二个循环中定义你的数字,所以这是16个数字。您可能希望在第一个循环中定义图形,使用第二个循环绘制4条线,然后在第二个循环之外设置轴特性(同样,因为只有一个打印…)。还可能需要颠倒循环的顺序。IIUC,一个循环:
对于xcol,zip中的实验室(x,xlab):
。此外,
ax=plt.gca()。如果您需要特定的文件名,请创建另一个列表并将其添加到
zip
@BigBen这正是我需要的,谢谢。