繁体   English   中英

重叠条形图,循环时间过长

[英]overlay bar chart, loops takes too long

这是我的代码:

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年重叠。

好的,所以我对其进行了一些重组,它似乎可以正常工作。 关键是在each_date循环的最后,您需要清除数字( clf )。 另外, for d_A, v_A in data_dict_A.items()循环在所有日期上循环,因此您需要检查d_Aeach_date相同。

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()

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM