1. 程式人生 > 實用技巧 >python 畫雙柱圖

python 畫雙柱圖

# -*- 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(lambda
x: 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.4
lon_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()

參考:https://www.jb51.net/article/142486.htm