Python繪圖與視覺化

eithre up or down發表於2020-02-17

使用的庫

Python有很多視覺化工具,如:Matplotlib。

Matplotlib是一種2D的繪相簿,它可以支援硬拷貝和跨系統的互動,它可以在Python指令碼、IPython的互動環境下、Web應用程式中使用。如果結合使用一種GUI工具包(如IPython),Matplotlib還具有諸如縮放和平移等互動功能。它不僅支援各種作業系統上許多不同的GUI後端,而且還能將圖片匯出為各種常見的向量(vector)和光柵(raster)圖:PDF、SVG、JPG、PNG、BMP、GIF等。

Matplotlib程式包

由於靠這個畫圖的話一般都會遇到比較複雜的資料處理,所以numpy也經常和matplotlib一起出現一起使用。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,1,50)  #產生[-1,1]間均勻間隔的資料50個
y = 2*x + 1

plt.figure()
plt.plot(x,y)
plt.show()

注:1.np.linspace()含義

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
start:返回樣本資料開始點
stop:返回樣本資料結束點
num:生成的樣本資料量,預設為50
endpoint:True則包含stop;False則不包含stop
retstep:If True, return (samples, step), where step is the spacing between samples.(即如果為True則結果會給出資料間隔)
dtype:輸出陣列型別
axis:0(預設)-1


2.plt.figure()
宣告的其實是一個figure視窗,這個視窗中可以包含很多個圖。
3.plt.plot()
plot(x,y,linestyle=‘dashed’,linewidth=0.5,color=’#3479f7’) ,裡面的引數可以自己設定
圖形展示:
在這裡插入圖片描述

繪圖命令的擴充套件及其屬性設定

x = np.linspace(-10,10,50)
y1 = 2*x + 1
y2 = x**x
plt.figure()
plt.plot(x,y1)
plt.plot(x,y2,linestyle='dashed',linewidth=0.5,color='red',marker='.',)
plt.xlim(1,3)
plt.xlabel('value of X')
plt.xticks(np.linspace(1,3,11))
plt.show()

注:
1.使用plt.xlim/ylim兩個方法可以分別設定x軸和y軸的範圍。用法就是xlim(min,max)。
2.使用plt.xlabel和ylabel可以設定x/y軸的說明文字。
3.使用plt.xticks/yticks兩個方法可以分別設定X和Y軸的座標點的值是多少。除了簡單的數值設定外,xticks/yticks還支援label設定。比如xticks([1,2,3,4],[‘bad’,‘ok’,‘good’,‘verygood’])這樣的方式,來將數值座標值和文字描述的座標值一一對應起來。
補充:
1.plt.gca()
這個方法返回一個包含所有座標軸的物件。gca的全稱估計是get current axes,也就是獲取到當前所有座標軸。
其中比較重要的一條屬性是
spines**,這個屬性是一個字典,可以有left,right,top,bottom的取值分別對應一個圖的四條邊。

ax = plt.gca()
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))

2.plt.legend()
圖例出現的位置預設是在左下方,可以在legend方法中用loc引數指明具體的位置。比如**plt.legend(loc=‘upper right’)**是出現在右上角。類似的引數值還有lower right,center left等等。此外還有一個best,這個值是說把位置自動交給電腦去判斷,儘量選擇一個不擋住任何東西的好的位置。
3.plt.scatter()
用來做散點圖,

import matplotlib.pyplot as plt  # 換個名字
import numpy as np
n = 1024    # data size
X = np.random.normal(0, 1, n) # 每一個點的X值
Y = np.random.normal(0, 1, n) # 每一個點的Y值
T = np.arctan2(Y,X) # for color value

plt.figure()
ax = plt.gca()
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
plt.scatter(X,Y,c=T,s=20) #c代表設定顏色
plt.xlim(-0.5,0.5)
plt.show()

畫多個子圖

使用subplot()方法

plt.subplot(2,2,1)

含多個座標軸

利用subplots()與twins()方法

import matplotlib.pyplot as plt
import numpy as np
import math
x = np.arange(-2,2,0.1)  # np.arange()函式返回一個有終點和起點的固定步長的排列
y1 = list(map(math.exp,x))  #注意遇到map要和list一起使用
y2 = -1*np.array(y1)

fig, left_ax = plt.subplots()    # 獲取當前的座標,是第二個返回物件
right_ax = left_ax.twinx()    # twinx生成另一個座標物件,複製物件
left_ax.plot(x,y1,color='blue')
left_ax.set_ylabel('value of Y1',color='blue')
right_ax.plot(x,y2,color='green')
right_ax.set_ylabel('value of Y2',color='green')
plt.show()

在這裡插入圖片描述

相關文章