有没有办法在matplotlib中制作多个水平箱图?

时间:2011-07-12 14:26:28

标签: python matplotlib

我正在尝试制作一个matplotlib图,它将有多个水平箱图堆叠在一起。文档显示了如何制作单个水平箱图以及如何制作多个垂直方向图[{3}}

我尝试使用以下代码中的子图:

import numpy as np
import pylab as plt

totfigs = 5

plt.figure()
plt.hold = True

for i in np.arange(totfigs):    
    x = np.random.random(50)
    plt.subplot('{0}{1}{2}'.format(totfigs,1,i+1))
    plt.boxplot(x,vert=0)
plt.show()

我的输出结果只是一个水平的盒子图。

有人建议吗?

修改:感谢@joaquin,我修复了plt.subplot来电线。现在subplot版本有效,但仍然希望箱图全部在一个图中......

2 个答案:

答案 0 :(得分:5)

如果我正确理解你,你只需要传递一个包含你想要绘制的每个数组的列表(或一个二维数组)的boxplot。

import numpy as np
import pylab as plt

totfigs = 5

plt.figure()
plt.hold = True
boxes=[]
for i in np.arange(totfigs):    
    x = np.random.random(50)
    boxes.append(x)

plt.boxplot(boxes,vert=0)
plt.show()

enter image description here

答案 1 :(得分:1)

尝试:

plt.subplot('{0}{1}{2}'.format(totfigs, 1, i+1)    # n rows, 1 column

plt.subplot('{0}{1}{2}'.format(1, totfigs, i+1))    # 1 row, n columns
来自docstring的

  

subplot(* args,** kwargs)

     

创建一个subplot命令,使用::

创建轴      

subplot(numRows,numCols,plotNum)

     

其中 plotNum = 1是第一个绘图编号并且增加 plotNums   首先填充行。 max( plotNum )== numRows * numCols

如果你想要它们,可以方便地移动它们。作为一个恒定班次的例子:

for i in np.arange(totfigs):    
    x = np.random.random(50)
    plt.boxplot(x+(i*2),vert=0)