2017-08-01 72 views
3

我有一个数据集是这样的:如何嵌套分支情节在python

样品数据框:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) 

我只知道如何生成单独的情节:

for k, m in zip('ABCD', 'mbry'): 
    plt.figure(k) 
    for i in range(5): 
     plt.subplot(5,1,i+1) 
     plt.bar(range(20), df[k][20*i: 20*(i+1)], color = m) 
    plt.subplots_adjust(wspace=0, hspace=0) 

plt.show() 

我怎样才能在同一页面中绘制所有四个数字?

这就是我想要的东西: enter image description here


更新于2017年8月2日:

我也想将其应用到更大的数据集。这是@ Phlya的代码,我试过,但它并没有给我什么,我想:

更大的数据集:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import gridspec 

df = pd.DataFrame(np.random.randint(0,100,size=(100, 11)), columns=list('ABCDEFGHIJK')) 

from mpl_toolkits.axes_grid1 import axes_grid 

f = plt.figure() 
for i, (k, m) in enumerate(zip('ABCDEFGHIJK', 'mbrygrygybr')): 
    ag = axes_grid.Grid(f, 261+i, (5, 1), axes_pad=0) 
    for j in range(5): 
     ag[j].bar(range(20), df[k][20*j: 20*(j+1)], color = m) 
     ag[j].set_ylim(0, df.max().max()) 
     if i%2==0: 
      if j == 4: 
       ag[j].yaxis.set_ticks([0, ag[j].get_yticks()[-1]]) 
      else: 
       ag[j].yaxis.set_ticks([ag[j].get_yticks()[-1]]) 
     else: 
      ag[j].yaxis.set_ticks([]) 

     if i in (0, 1): 
      ag[j].xaxis.set_ticks([]) 

plt.subplots_adjust(wspace=0.5, hspace=0.5) 
plt.show() 

该数据集有11组数据,清楚可以看到代码所做一个错误: enter image description here

+0

'''plt.figure'''做什么? – wwii

+0

@wwii对不起,我原来的帖子没有说清楚。我想得到和我的代码一样的情节。但我希望他们在同一页面。 – Kevin

回答

4

完全重写。

Axesgrid是你想要的,我想。

from mpl_toolkits.axes_grid1 import axes_grid 
nrows = 2 
ncols = 6 
naxes = 5 
f = plt.figure(figsize=(10, 6)) 
for i, (k, m) in enumerate(zip('ABCDEFGHIJK', 'mbrygrygybr')): 
    ag = axes_grid.Grid(f, (nrows, ncols, i+1), (naxes, 1), axes_pad=0) 
    for j in range(naxes): 
     ag[j].bar(range(20), df[k][20*j: 20*(j+1)], color = m) 
     ag[j].set_ylim(0, df.max().max()) 
     if i%ncols==0: 
      if j == naxes-1: 
       ag[j].yaxis.set_ticks([0, ag[j].get_yticks()[-1]]) 
      else: 
       ag[j].yaxis.set_ticks([ag[j].get_yticks()[-1]]) 
     else: 
      ag[j].yaxis.set_ticks([]) 
     if i in range(ncols): 
      ag[j].xaxis.set_ticks([]) 

plt.subplots_adjust(wspace=0.1, hspace=0.1) 
plt.show() 

enter image description here

编辑: 尼斯蜱和间距

编辑: 现在应与电网的任意数量的工作。 当i> 9时,主要的问题是指定网格位置。

+0

超酷!谢谢! – Kevin

+1

@Kevin很高兴能帮到你!另请参阅我的新编辑,以便在所有情节中制作漂亮的刻度和相同的y限制(假设这是您想要的)。 – Phlya

+0

嗨Phlya,当我试图在2 x 6 supbplots上绘制11组数据时,我遇到了一些问题。仅显示十组数据并且最后面板的位置和形状是错误的。你能帮我看看吗? [链接](https://www.dropbox.com/s/yuyvcf8viaiuu8a/Unknown.png?dl=0)。谢谢! – Kevin

-1

你可以使用

fig, ax = plt.subplots(2, 2) 

这将产生一个数字与4 Axes对象,您想要的方式产生的轴。通过访问2D阵列ax来处理每个Axes对象。例如,左上角的图是ax[0][0]

+0

OP需要5根轴,而不是您的建议中的每根轴。 – Phlya