我想在生成器函数中创建几个带有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()
答案 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列的数字。