1. 程式人生 > >『python』科學計算專項_科學繪圖庫matplotlib學習(下)

『python』科學計算專項_科學繪圖庫matplotlib學習(下)

時序 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學習(下)