python matplotlib進階篇
阿新 • • 發佈:2018-11-10
匯入的模組:
import matplotlib.pyplot as plt
import numpy as np
#正確顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
#顯示負號的
plt.rcParams['axes.unicode_minus'] = False
import pandas as pd
from pandas import Series,DataFrame
1.給柱狀圖的柱子設定名字
# 取出一張圖紙
plt.figure(1)
#確定影象的位置
#subplot(xyz) x行y列z位置,比如111就是一行一列一整個
ax1 = plt.subplot(111)
#準備畫圖的資料
data = np.array([15,20,18,25])
# 給一個範圍,x軸
x_bar = np.arange(4)
# 設定x,y軸,left和height是匿名引數
rect = ax1.bar(left = x_bar,height = data,width=0.5,color='#add8e6')
#利用for迴圈來獲取寬度和高度,用途是給每一個柱子設定文字
for rec in rect:
x = rec.get_x() # 這是獲取每一個柱子x軸的位置
# print(x)
height = rec.get_height() #這是獲取每一個柱子y軸高度的位置
# print(height)
#設定文字bar(柱)上的文字
#語法:ax1.text(x,y,str) x:文字在bar上的位置,預設是0.最左邊,可以加上一個以x軸大小為單位的值
#y:文字在bar上的位置,預設是0.最下邊,可以加上一個以y軸大小為單位的值
#str:是要顯示的文字
ax1.text(x+0.1,height+0.3,str(height)+'W')
# 設定x軸
ax1.set_xticks(x_bar)
ax1.set_xticklabels(['第一季度','第二季度','第三季度' ,'第四季度'])
#set_xlabel和plt.xlabel 一樣的含義
#設定y軸
ax1.set_ylabel('銷量(單位:萬件)')
ax1.set_title('2017年季度銷售量統計')
ax1.grid(True)# 加上網格
ax1.set_ylim(0,30)#設定y軸範圍
plt.show()
2.同畫布繪製多幅圖形
# 預設的畫素就是80
plt.figure(figsize=(3,3),dpi=80)
#建立一個畫板
plt.figure(1)
plt.subplot(121)
plt.plot([1,2,3],[1,2,3])
plt.title('畫板1的畫布1')
plt.subplot(122)
plt.plot([1,2,3],[1,2,3])
plt.title('畫板1的畫布2')
plt.tight_layout() # 設定畫布1和畫布2的距離
#畫到新建的畫板裡的
plt.figure(2)
plt.plot([4,5,6],[4,5,6])
plt.title('畫板2的畫布')
3.載入檔案並繪圖
這裡以csv檔案為例子
(1)用csv模組進行讀取
import csv
x=[]
y=[]
with open('csv/matplotlib-demo.csv','r') as csvfile:
#讀取的檔案
lines = csv.reader(csvfile,delimiter=',')
# print(list(lines))
for each in lines:
x.append(int(each[0]))# x列表是加入資料表中的第一列
y.append(int(each[1]))# y列表是加入資料表中的第二列
print(x)
print(y)
plt.plot(x,y,label='csv資料')
plt.title('從檔案載入資料並展示')
plt.legend()
plt.ylim(0,9)#設定y軸的範圍
plt.show()
(2).使用Numpy簡化程式碼
x,y = np.loadtxt('csv/matplotlib-demo.csv',delimiter=',',unpack=True)
plt.plot(x,y,label='csv資料')
plt.title('從檔案載入資料並展示')
plt.legend()
plt.ylim(0,9)#設定y軸的範圍
plt.show()
4.從網路api上載入資料並繪圖
import urllib
url ='https://api.douban.com/v2/book/1220562'
json_object = urllib.request.urlopen(url).read().decode() #開啟讀取解碼
import json
#進行轉換
data = json.loads(json_object)
# print(data)
#獲取所有的標籤
tags =data['tags']
print(tags)
x =[]
y =[]
for each in tags:
x.append(each['name'])
y.append(each['count'])
plt.bar(x,y,label='圖書搜尋熱詞')
plt.legend()
plt.xlabel('搜尋的詞條')
plt.ylabel('搜尋排名')
plt.show()