1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 def draw_data(n, a, b, c, d, values, fig, plt, t, xl, ticks): 5 fig.add_subplot(2, 2, n) 6 x = np.arange(1, c, 1) 7 y = values[d, a:b+1] 8 print("---y---:\n",y) 9 plt.bar(x, y, width=0.5, color=["#BCEE68", "#A2CD5A", "#6E8B3D"]) 10 plt.title(t) 11 plt.xlabel(xl) 12 plt.ylabel("生产总值(亿元)") 13 plt.xticks(x, ticks) 14 for i,j in zip(x, y): 15 plt.text(i, j, "%.2f亿元"%j, horizontalalignment='center', verticalalignment='bottom') 16 return plt 17 18 def show_data(): 19 fig = plt.figure(figsize=(20, 12), dpi=120) 20 plt.rcParams['font.sans-serif'] = 'SimHei' 21 plt.rcParams['axes.unicode_minus'] = False 22 # plt.subplots_adjust(hspace=0.3) 23 return fig, plt 24 25 def save_data(): 26 plt.savefig("./2000-2017年各个产业、行业的柱状图.png") 27 plt.show() 28 return None 29 30 31 def build_data(): 32 res = np.load("./国民经济核算季度数据.npz", allow_pickle=True) 33 columns = res["columns"] 34 values = res["values"] 35 # print(columns) 36 # print(values) 37 return columns, values 38 39 def main(): 40 columns, values = build_data() 41 fig, plt = show_data() 42 title1 = "2000年第一季度国民总值产业构成分布柱状图" 43 title2 = "2017年第一季度国民总值产业构成分布柱状图" 44 xlabel1 = "产业" 45 xlabel2 = "行业" 46 ticks1 = [tmp[:4] for tmp in columns[3:6]] 47 ticks2 = [tmp[:2] for tmp in columns[6:]] 48 draw_data(1, 3, 5, 4, 0, values, fig, plt, title1, xlabel1, ticks1) 49 draw_data(2, 3, 5, 4, 68, values, fig, plt, title2, xlabel1, ticks1) 50 draw_data(3, 6, 14, 10, 0, values, fig, plt, title1, xlabel2, ticks2) 51 draw_data(4, 6, 14, 10, 68, values, fig, plt, title2, xlabel2, ticks2) 52 save_data() 53 54 55 if __name__ == '__main__': 56 main()