python 畫雙柱圖
阿新 • • 發佈:2020-08-20
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt from datetime import datetime import open_file fig = plt.figure(figsize=(20, 10)) # 定義 x 軸資料 lat_x = [i for i in range(9, 55)] lon_x = [i for i in range(74, 135, 2)] # 從檔案讀取資料 xn_lat, xn_lon = open_file.open_xn('int') ys_lat, ys_lon = open_file.open_ys('int') # 定義 y 軸資料 xn_lat_y = [i for i in map(lambda x: xn_lat.count(x)+ys_lat.count(x), lat_x)] # 找到 lat_x 在資料 緯度xn_lat 中的個數 xn_lon_y = [i for i in map(lambda x: xn_lon.count(x)+ys_lon.count(x), lon_x)] ys_lat_y = [i for i in map(lambda x: ys_lat.count(x), lat_x)] ys_lon_y = [i for i in map(lambdax: ys_lon.count(x), lon_x)] dpi, width = 400, 0.4 # 解析度,柱子寬度 plt.rc('font', family='SimHei', size=12) # 設定中文顯示,否則出現亂碼 ax1 = plt.subplot(2, 1, 1) # ('行','列','編號') 2 行 1 列 第 1 個 pu/rple plt.bar(x=lon_x, height=ys_lon_y, width=width, label='填補前站數', fc='purple') for i in range(len(lon_x)): # 雙柱圖width # 不加這段,雙柱圖會重疊,x 引數 其實就是設定它一個數據顯示柱子寬度,第一個為0.4 第二個為 +=0.4lon_x[i] = lon_x[i] + width plt.bar(x=lon_x, height=xn_lon_y, width=width , label='填補後站數', fc='green') plt.xticks([i for i in range(74, 135, 2)]) # 設定x軸上顯示的值 # 設定橫軸標籤 plt.xlabel('經度(° E)') # 設定縱軸標籤 plt.ylabel('站點個數') # 新增標題 plt.title('站點隨經度變化') plt.legend() # 設定圖例,就是讓 label 畫出來 ax2 = plt.subplot(2, 1, 2) # ('行','列','編號') plt.bar(x=lat_x, height=ys_lat_y, width=width, label='填補前站數', fc='purple') for i in range(len(lat_x)): lat_x[i] = lat_x[i] + width plt.bar(x=lat_x, height=xn_lat_y, width=width, label='填補後站數', fc='green') plt.xticks([i for i in range(9, 55)]) # 設定x軸上顯示的值 # 設定橫軸標籤 plt.xlabel('緯度(° N)') # 設定縱軸標籤 plt.ylabel('站點個數') # 新增標題 plt.title('站點隨緯度變化') plt.legend() # 讓 label 畫出來 loc='upper right' 設定圖例在哪裡 out_file = '%s_%s_%s.png' % (datetime.now().strftime('%Y%m%d%H%M&S'), width, dpi) plt.savefig(out_file, transparent=True, bbox_inches='tight', dpi=dpi, pad_inches=0.0, set_visiable=False, format='png') # plt.show()