需要帮助创建一个函数来绘制Matplotlib GridSpec

时间:2017-05-13 02:18:07

标签: python-3.x matplotlib

我有一个包含80个变量的数据集。我有兴趣创建一个能够在Matplotlib中自动创建20 X 4 GridSpec的函数。每个子图可以包含数据中80个变量中每个变量的直方图或条形图。作为第一步,我成功创建了两个函数(我称之为'计数'和#39;直方图'),其中包含我想要的图的布局。当对单个变量进行测试时,它们都可以工作。下一步,我尝试创建一个函数,该函数将获取列名,循环遍历条件以测试数据类型是否为对象,或者根据数据类型调用正确的函数作为新的子图。这是我到目前为止的代码:

创建子图规范所需的坐标列表:

A = np.arange(21)
B = np.arange(4)
coords = []

for i in A:
    for j in B:
        coords.append([A[i], B[j]])

#Create the gridspec and layout the figure
import matplotlib.gridspec as gridspec
fig = plt.figure(figsize=(12,6))
gs = gridspec.GridSpec(2,4)

#Function that relies on what we've done above:
def grid(cols=['MSZoning', 'LotFrontage', 'LotArea', 'Street', 'Alley']):
    for i in cols:
        for vals in coords:
            if str(train[i].dtype) == 'object':
                plt.subplot('gs'+str(vals))
                counts(cols)
            else:
                plt.subplot('gs'+str(vals))
                histogram(cols)

尝试时,此代码返回错误:

ValueError:子图的单个参数必须是3位整数

为了帮助您实现可视化,我希望实现的目标,我附上下面的屏幕截图,这是由逐行编码(使用我创建的辅助函数)生成的,我试图避免: enter image description here

任何人都可以帮我弄明白我哪里错了吗?我很感激任何建议。谢谢!

1 个答案:

答案 0 :(得分:0)

plt.subplot('gs'+str(vals))无效;这也是错误告诉你的。

从matplotlib GridSpec tutorial可以看出,它必须是

ax = plt.subplot(gs[0, 0])

因此,在您的情况下,您可以使用列表中的值

ax = plt.subplot(gs[vals[0], vals[1]])

请注意,如果将gridspec定义为coords,您还需要确保n*m列表必须包含gs = gridspec.GridSpec(n,m)元素。