如何在python中制作子图?

时间:2017-01-25 17:07:56

标签: python-3.x pandas matplotlib subplot

我正在尝试制作子图。 我从数据框中调用了许多列,将它们转换为数组并绘制它们。 我想将它们绘制成4行,2列。但我只得到1列(你可以检查图像)。我做错了什么?

这是我的代码:

  for column in df3:  #I call the dataframe
      data=df3[column].values  #Turn it into an array

      fig = plt.figure()
      plt.subplot (4,2,1) #I want 4 rows and 2 columns
      ax,_=plot_topomap(data, sensors_pos, cmap='viridis', vmin=0, vmax=100, show=False)
      plt.title("KNN" + " " + column) #This is the title for each subplot
      fig.colorbar(ax)
      plt.show 

enter image description here

1 个答案:

答案 0 :(得分:1)

有些事情可能会导致代码出现问题,而且在不知道完整代码的情况下很难找到解决方案。

在您的代码中,您可以创建多个数字。但是,你真的想要一个单一的数字。所以这个数字需要在循环之外创建。

然后你想创建子图,所以在每个循环步骤中你需要告诉matplotlib它应该绘制哪个子图。这可以通过ax = fig.add_subplot(4,2,n)完成,其中n是在循环的每次运行中增加的数字。

接下来,您致电plot_topomap。但是plot_topomap如何知道在哪里绘制?您需要通过提供关键字参数axes = ax来告诉它。

最后尝试设置一个颜色条,返回图像作为轴ax的参数。

当然我无法测试以下代码,但如果我对所有内容进行了很好的解释,它可能会做你想要的。

n = 1
fig = plt.figure()
for column in df3:  #I call the dataframe
    data=df3[column].values  #Turn it into an array

    ax = fig.add_subplot(4,2,n) #I want 4 rows and 2 columns
    im,_ = plot_topomap(data, sensors_pos, cmap='viridis', vmin=0, vmax=100, show=False, axes=ax)
    ax.set_title("KNN" + " " + column) #This is the title for each subplot
    fig.colorbar(im, ax=ax)
    n+=1