Python 更改plt.plot的for循环中的标题,并创建6x16子地块

Python 更改plt.plot的for循环中的标题,并创建6x16子地块,python,for-loop,matplotlib,subplot,Python,For Loop,Matplotlib,Subplot,我正在通过for循环创建96个不同的图形,我希望它也能标记这些图形(即,第一个图形是'Channel 1',第二个图形是'Channel 2',等等)。我尝试了ax.set_title,但无法理解如何使用字符串和数字 另外,我希望将这些图打印为6x16子图,而不是一列中的96个图。每次在for循环中都会创建一个新的图,这就是为什么会得到96个图。我没有您的数据,因此无法提供最终的图,但以下内容应该适用于您。这里的想法是: 定义包含6x16子批次的图形和轴阵列 在轴上使用枚举。展平以逐行遍历子图

我正在通过for循环创建96个不同的图形,我希望它也能标记这些图形(即,第一个图形是
'Channel 1'
,第二个图形是
'Channel 2'
,等等)。我尝试了
ax.set_title
,但无法理解如何使用字符串和数字


另外,我希望将这些图打印为6x16子图,而不是一列中的96个图。

每次在for循环中都会创建一个新的图,这就是为什么会得到96个图。我没有您的数据,因此无法提供最终的图,但以下内容应该适用于您。这里的想法是:

  • 定义包含6x16子批次的图形和轴阵列
  • 轴上使用
    枚举
    。展平
    以逐行遍历子图形
    ax
    ,并使用
    i
    作为访问数据的索引
  • 使用字段说明符
    %d
    以迭代方式标记子批次
  • plt.show()
    置于for循环之外


我试着运行这个,但是我被枚举(axes.flatte())弄糊涂了:,我需要在循环中迭代96次。我尝试了两个循环,但都不起作用。
enumerate(axes.flatte()):
返回两件事:第一,从0开始的索引,第二,for循环中每个子批次的实际轴对象如果有6行16列,那么这个for循环确实会运行96次。
i
的值将从0变为95。为了说服自己,可以添加
print(i)
在for循环内,它将打印0、1、2、…、94、,95@MichelleHernandez:如果您的问题已经解决,您应该通过单击灰色复选标记将答案标记为已接受。这就是堆栈溢出的工作原理。由于您似乎对堆栈溢出还不熟悉,您应该阅读此代码,现在代码正在工作,但子部分都是重叠的我尝试将其更改为32行3列,并添加plt.tight_layout(),但这两个都不起作用
secondHold = np.zeros((96,30))

channel = ['channel' for x in range(96)]


for i in range (96):
    BlankBinsx = bins[blankposition,0:30,i]
    StimBinsx = bins[NonBlankPositions,0:30,i]
    meanx = BlankBinsx.mean(axis=0);
    stimmeanx = StimBinsx.mean(axis=0);
    for j in range(30):
        hold[i][j] = meanx[j];
        secondHold[i][j] = stimmeanx[j];
    plt.subplots(1, 1, sharex='all', sharey='all')
    plt.plot(hold[i], label='stimulus')
    plt.plot(secondHold[i], label='Blank Stimulus')
    plt.title('Channel x')
    plt.xlabel('time (ms)')
    plt.ylabel('Avg Spike Rate')
    plt.legend()
    plt.show()

secondHold = np.zeros((96,30))
channel = ['channel' for x in range(96)]

fig, axes = plt.subplots(nrows=6, ncols=16, sharex='all', sharey='all')

for i, ax in enumerate(axes.flatten()):
    BlankBinsx = bins[blankposition,0:30,i]
    StimBinsx = bins[NonBlankPositions,0:30,i]
    meanx = BlankBinsx.mean(axis=0);
    stimmeanx = StimBinsx.mean(axis=0);
    for j in range(30):
        hold[i][j] = meanx[j];
        secondHold[i][j] = stimmeanx[j];
    ax.plot(hold[i], label='stimulus')
    ax.plot(secondHold[i], label='Blank Stimulus')
    ax.set_title('Channel %d' %i)
    ax.set_xlabel('time (ms)')
    ax.set_ylabel('Avg Spike Rate')
    ax.legend()
plt.show()