从生成器函数传递多个matplotlib Axes对象并显示它们

时间:2015-03-14 01:44:31

标签: python pandas matplotlib

我想在生成器函数中创建几个带有pandas的直方图,将它们作为matplotlib Axes对象列表传递给main函数,然后逐个显示它们。

我的代码如下。第一个数字显示OK,但是当我尝试显示第二个时,我得到:“ValueError:在图中找不到Axes实例参数。”

此错误消息是什么意思?我该如何解决?

import argparse
import matplotlib.pyplot as plt
import pandas as pd

def make_hist(n,input_data,Xcolname,bins):
    curr_num=0
    while curr_num<n:
        afig = input_data[curr_num][Xcolname].hist(bins=bins)
        yield afig
        curr_num=curr_num+1

 def main():    
    filepath = "C:/Users/Drosophila/Desktop/test.txt"
    filepath2="C:/Users/Drosophila/Desktop/test.txt"
    input_data = load_data_from_file([filepath,filepath2],concatenate=False)

    Xcolname = 's5/s6'

    pd.options.display.mpl_style = 'default'    

    bins=10

    n=2

    figs=list(make_hist(n,input_data,Xcolname,bins))

    plt.sca(figs[0])
    plt.show()

    plt.sca(figs[1])
    plt.show()

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

将问题最小化到直方图生成器:

import matplotlib.pyplot as plt
import pandas as pd
from numpy.random import random

def make_hist(input_data,bins):
    for row in input_data:
        print(row) # micro-testing: do the hists look about right?
        bin_edges, bin_heights, patches = plt.hist(row, bins=bins)
        yield patches


input_data = random((3, 6))

pd.options.display.mpl_style = 'default'

fig = plt.figure()
for patches in make_hist(input_data, 10):
    plt.show() 
    fig.clf() 

你的主要问题是,即使使用一个轴,运行hist也不会返回一个轴。

此外,我认为你使用的是一个你不需要的发电机(传递n似乎倒退),虽然很难说出上下文。当你有一个plotsworth时,为什么不循环遍历你的数据和情节呢?或者每个n x m plotsworth,如果你想要n行m列的数字。