2017-08-01 29 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