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