根据数据中的列数动态生成箱线图

时间:2015-07-17 11:52:09

标签: python matplotlib

我正在编写一个python函数来使用python的matplotlib生成数据箱图。我需要此函数根据数据中的列数动态确定数字和子图的数量。为了使数字可读,我希望子图的最大数量为4乘4.如果有超过16个,我想根据需要填充4乘4的数字,然后用剩余部分填充最终数字。

例如,我目前拥有的数据有43列。因此,我希望此函数生成2个完整图形,每个图形包含16个子图,每个部分填充图包含剩余的子图。我的问题是我坚持写这样一个函数的逻辑。

我的代码:

import matplotlib.pyplot as plt

def boxplot_data(self,parameters_file):
    data = read_csv(parameters_file)
    header = data.keys()
    number_of_full_subplots = len(header)/16
    remainder = len(header)-(16*number_of_full_subplots)

    for i in range(0,number_of_full_subplots):
        plt.figure(i)
        for j in range(0,16):
            plt.subplot(4,4,j)
            boxplot(data[header[0:16]])

我的计划是首先迭代'完整的子图'然后迭代剩余部分,但是这个方法产生两个相同的数字。

有人有什么建议吗?

由于

1 个答案:

答案 0 :(得分:2)

这些数字是相同的,因为这一行

            boxplot(data[header[0:16]])
ij递增时,

不会更改。

将其替换为

            boxplot(data[header[16*i+j]])
import matplotlib.pyplot as plt

def boxplot_data(self, parameters_file):
    data = read_csv(parameters_file)
    header = data.keys()
    number_of_full_subplots = len(header)/16

    for i in range(number_of_full_subplots):
        plt.figure(i)
        for j in range(16):
            plt.subplot(4, 4, j)
            boxplot(data[header[16*i+j]])