Python進階 -- matplotlib

夜空中最亮的不咚發表於2018-04-24

通過安裝Anaconda3,使用matplotlib庫

0. 基本繪畫設定
(1). Figure和Subplot
matplotlib的影像都位於Figure物件中,你可以用plt.figure建立一個新的Figure.

#這時會彈出一個空窗
fig = plt.figure()12複製程式碼

但是不能通過空Figure繪圖,必須用add_subplot建立一個或多個subplot才行

#這條程式碼的意思是:影像應該是2X2的,且當前選中的是第一個
ax1 = fig.add_subplot(2,2,1)

#再繪製兩個
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)123456複製程式碼

此時繪圖,就會在subplot上進行繪製
例如:

from numpy.random import randn
plt.plot(randn(50).cumsum(), 'k--')
#'k--'是一個線型選項,用於告訴matplotlib繪製黑色虛線圖。123複製程式碼

別一種更為方便的方法,可以建立一個新的Figure,並返回一個含有已建立subplot物件的NumPy陣列:

#建立了一個兩行,三列的區域
fig, axes = plt.subplots(2,3)12複製程式碼

這裡寫圖片描述

(2). 調整subplot周圍的間距
預設情況下,matplotlib會在subplot外圍留下一定的邊距,並在subplot之間留下一定的間距。
利用subplots_adjust方法可以調整間距

fig, axes = plt.subplots(2,2, sharex=True, sharey=True)
for i in range(2):
    for j in range(2):
        axes[i,j].hist(randn(500), bins=50, color='k', alpha=0.5)

plt.subplots_adjust(wspace=0, hspace=0)123456複製程式碼

這裡寫圖片描述

(3). 顏色、標記和線型
根據x,y繪製綠色虛線

ax.plot(x, y, 'g--')
#與下面設定是一樣的
ax.plot(x, y, linestyle='--', color='g')123複製程式碼

線型圖可以加上一些標記,來強調實際的點

plt.plot(randn(30).cumsum(), 'ko--')
#等價於
plt.plot(randn(30).cumsum(), color='k', linestyle='dashed', marker='o')123複製程式碼

(4). 刻度、標籤和圖例
新增刻度和標籤

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(randn(1000).cumsum())

#修改X軸的刻度
#刻度放在哪些位置
ticks = ax.set_xticks([0,250,500,750,1000])
#也可以將其他值用作標籤
labels = ax.set_xticklabels(['one','two','three','four','five'], rotation=30, fontsize='small')

#為X軸設定一個名稱
ax.set_title('My first matplotlib plot')
#設定一個標題
ax.set_xlabel('Stages')1234567891011121314複製程式碼

這裡寫圖片描述

新增圖例:

fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')

ax.legend(loc='best')1234567複製程式碼

這裡寫圖片描述

1. 繪製簡單的折線圖

(1). 函式plot()
列表傳遞給這個函式,這個函式將嘗試根據這些數字繪製出有意義的圖形。

import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()1234複製程式碼

(2). 修改標籤文字和線條粗細

import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]

#引數linewidth 決定了plot() 繪製的線條的粗細
plt.plot(squares, linewidth=5)


# 設定圖表標題, 並給座標軸加上標籤
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# 設定刻度標記的大小
plt.tick_params(axis='both', labelsize=14)
plt.show()123456789101112131415複製程式碼

(3). 校正圖形

  • 當你向plot() 提供一系列數字時, 它假設第一個資料點對應的 x 座標值為0, 但我們的第一個點對應的 x 值為1。
  • 為改變這種預設行為, 我們可以給plot() 同時提供輸入值和輸出值:
input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=5)123複製程式碼

2. 繪製繪製散點圖
(1). 使用scatter() 繪製散點圖並設定其樣式

import matplotlib.pyplot as plt
plt.scatter(2, 4)
plt.show()123複製程式碼

(2).使用scatter() 繪製一系列點

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]
#並使用實參s 設定了繪製圖形時使用的點的尺寸
plt.scatter(x_values, y_values, s=100)
plt.show()1234567複製程式碼

(3).刪除資料點的輪廓
可在呼叫scatter() 時傳遞實參edgecolor=’none’

plt.scatter(x_values, y_values, edgecolor='none', s=40)1複製程式碼

(4).自定義顏色
要修改資料點的顏色, 可向scatter() 傳遞引數c , 並將其設定為要使用的顏色的名稱,

plt.scatter(x_values, y_values, c='red', edgecolor='none', s=40)1複製程式碼

(5).使用顏色對映
顏色對映 ( colormap) 是一系列顏色, 它們從起始顏色漸變到結束顏色。

import matplotlib.pyplot as plt

x_values = list(range(1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, edgecolor='none', s=40)


# 設定每個座標軸的取值範圍
plt.axis([0, 1100, 0, 1100000])
plt.show()12345678910複製程式碼
  • 我們將引數c 設定成了一個 y 值列表, 並使用引數cmap 告訴pyplot 使用哪個顏色對映。
  • 這些程式碼將 y值較小的點顯示為淺藍色, 並將 y 值較大的點顯示為深藍色.

(6).自動儲存圖表
要讓程式自動將圖表儲存到檔案中, 可將對plt.show() 的呼叫替換為對plt.savefig() 的呼叫

plt.savefig('squares_plot.png', bbox_inches='tight')1複製程式碼
  • 第一個實參指定要以什麼樣的檔名儲存圖表, 這個檔案將儲存到scatter_squares.py所在的目錄中;
  • 第二個實參指定將圖表多餘的空白區域裁剪掉。 如果要保留圖表周圍多餘的空白區域, 可省略這個實參。

(7). 隱藏座標軸

plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)

(8). 調整尺寸以適合螢幕
函式figure() 用於指定圖表的寬度、 高度、 解析度和背景色。
你需要給形參figsize 指定一個元組, 向matplotlib指出繪圖視窗的尺寸, 單位為英寸。
plt.figure(figsize=(10, 6))

3. 隨機漫步
choice()函式

#choice([0, 1, 2, 3, 4]) 隨機地選擇一個0~4之間的整數
x_distance = choice([0, 1, 2, 3, 4])12複製程式碼

range()函式
返回一系列連續增加的整數

randint()函式
返回一個1和麵數之間的隨機數


相關文章