我正在尝试制作一个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版本有效,但仍然希望箱图全部在一个图中......
答案 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()
答案 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)