Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 覆盖条形图,循环时间过长_Python_Matplotlib - Fatal编程技术网

Python 覆盖条形图,循环时间过长

Python 覆盖条形图,循环时间过长,python,matplotlib,Python,Matplotlib,这是我的密码: import time import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() list_date = ['2015', '2016', '2017'] data_dict_A = {'2015': {1: 254, 2:567, 3:786}, '2016':{1:567, 2:189, 3:145}, '2017':

这是我的密码:

import time
import numpy as np
import matplotlib.pyplot as plt



fig, ax = plt.subplots()

list_date = ['2015', '2016', '2017']

data_dict_A = {'2015': {1: 254, 2:567, 3:786}, 
             '2016':{1:567, 2:189, 3:145},
             '2017': {1:89, 2:123, 3:190}}
data_dict_B = {'2015': {1: 154, 2:597, 3:286}, 
             '2016':{1:967, 2:789, 3:345},
             '2017': {1:189, 2:223, 3:290}}
data_dict_C = {'2015': {1: 354, 2:591, 3:486}, 
             '2016':{1:267, 2:289, 3:367},
             '2017': {1:489, 2:256, 3:390}}

length = np.arange(1, 4, 1)
width = 0.2

for each_date in list_date:
    for d_A, v_A in data_dict_A.items():
        for d_B, v_B in data_dict_B.items():
            for d_C, v_C in data_dict_C.items():
                if each_date in data_dict_A.keys():
                    graph_A = plt.bar(length-0.2, v_A.values(), width, color="blue", align='center')
                    graph_B = plt.bar(length, v_B.values(), width, color="red", align='center')
                    graph_C = plt.bar(length+0.2, v_C.values(), width, color="yellow", align='center')
                    plt.legend((graph_A[0], graph_B[0], graph_C[0]), ('A', 'B', 'C'), loc='best')
                    plt.title(str(each_date))
                    fig.savefig( str(each_date) +'.png')
如果你运行这段代码,它看起来并不是我想要的。例如:我想要一个关于“2015”、“2016”和“2017”的单独图表!x轴将是1、2、3,而y值将是它们的关键值


当您运行此代码时,2015年的图表与2016年和2017年的图表重叠。

好的,所以我对其进行了一点重构,它似乎起到了作用。关键是在每个_日期循环的末尾,您需要清除figure clf。此外,数据目录中d_A、v_A的循环项在所有日期上循环,因此需要检查d_A的日期是否与每个日期相同

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()

list_date = ['2015', '2016', '2017']

data_dict_A = {'2015': {1: 254, 2:567, 3:786}, 
             '2016':{1:567, 2:189, 3:145},
             '2017': {1:89, 2:123, 3:190}}
data_dict_B = {'2015': {1: 154, 2:597, 3:286}, 
             '2016':{1:967, 2:789, 3:345},
             '2017': {1:189, 2:223, 3:290}}
data_dict_C = {'2015': {1: 354, 2:591, 3:486}, 
             '2016':{1:267, 2:289, 3:367},
             '2017': {1:489, 2:256, 3:390}}

length = np.arange(1, 4, 1)
width = 0.2

for each_date in list_date:
    ax = fig.add_subplot(111)

    for d_A, v_A in data_dict_A.items():
        if d_A == each_date:
            graph_A = plt.bar(length-0.2, v_A.values(), width, color="blue", align='center')

    for d_B, v_B in data_dict_B.items():
        if d_B == each_date:
            graph_B = plt.bar(length, v_B.values(), width, color="red", align='center')

    for d_C, v_C in data_dict_C.items():
        if d_C == each_date:
            graph_C = plt.bar(length+0.2, v_C.values(), width, color="yellow", align='center')

    plt.legend((graph_A[0], graph_B[0], graph_C[0]), ('A', 'B', 'C'), loc='best')
    plt.title(str(each_date))
    fig.savefig( str(each_date) +'.png')
    fig.clf()