[英]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_A
与each_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.