『python』科學計算專項_科學繪圖庫matplotlib學習(下)
阿新 • • 發佈:2017-07-04
時序 nco 字符 color 由於 enc -- angle fig
基本的讀取csv文件並繪制餅圖
由於之前沒有過實際處理的經驗,所以這個程序還是值得一看,涉及了處理表格數據的基本方法:
import matplotlib.pyplot as plt import pandas as pd # csv讀取文件 data = pd.read_csv(‘OutOrder.csv‘,encoding=‘gb2312‘) # 每一列都兼容numpy的方法 a = data[‘方式‘].values # 獲取本列的內容的各種可能 typename = [] for i in a: if i not in typename: typename.append(i) # 獲取每種可能的數目 typenum = [] for i in typename: typenum.append(sum(a==i)) print(typenum) # 繪制餅圖 plt.axis(‘equal‘) plt.pie(typenum,labels=typename,shadow=True, labeldistance=1.1,autopct=‘%3.1f%%‘, startangle=0,pctdistance=0.8) plt.legend() plt.show()
添加了時間處理的統計圖,稍微復雜一點
有兩個地方值得註意:
- str字符串轉換為datetime時間對象的兩種方法(datetime包和pandas內置集成)
- 雙縱坐標圖的繪制方法
from matplotlib import pyplot as plt import pandas as pd import numpy as np import datetime data = pd.read_csv(‘OutOrder.csv‘,encoding=‘gb2312‘) def toDT(a): return datetime.datetime.strptime(a,‘%m/%d/%Y %H:%M‘) # 註意時序字符串處理 # 轉換str成datetime格式 a = data[u‘時間‘].apply(toDT) # <-------顯示使用datetime處理時間字符串 # a = pd.to_datetime(data[u‘時間‘]) # <-------pandas內置處理時間字符串方法,和上面等價 print(a) # X用來存月份,Y用來存金額,Z用來存人數 X=[];Y=[];Z=[] for i in range(12): start_time = datetime.datetime(2015, i+1, 1) if i + 2 > 12: end_time = datetime.datetime(2016, 1, 1) else: end_time = datetime.datetime(2015, i+2, 1) idx = np.where((a>start_time)&(a<end_time)) # np.where返回含有一個數組的單元素索引元組:(array數組,),所以加[0] if len(idx[0])>0: X.append(i + 1) Y.append(sum(data[‘金額‘].values[idx[0]])) Z.append(len(idx[0])) width = 0.25 fig, ax1 = plt.subplots() ax1.bar(np.array(X)-width, Y, width, facecolor=‘#9999ff‘, edgecolor=‘white‘) ax1.set_ylabel(‘money‘, color=‘b‘) ax1.set_xlabel(‘month‘) # ax1.bar(np.array(X)+1, Z, width, facecolor=‘#ff9999‘, edgecolor=‘white‘) # 普通的伴生圖繪制方法 ax2 = ax1.twinx() # <-------伴生圖繪制方法(使用同樣的橫坐標,但是不共用縱軸) ax2.bar(X, Z, width, facecolor=‘#ff9999‘, edgecolor=‘white‘) ax2.set_ylabel(‘people num‘, color=‘r‘) plt.grid(True) plt.show()
輸出圖像:
不使用雙縱坐標軸的輸出圖:
『python』科學計算專項_科學繪圖庫matplotlib學習(下)