本文部分內容整理自
.
本篇文章給大家講述關于數據可視化工具的一些基礎知識。是一個繪圖庫,可以在各種平臺上以各種硬拷貝格式和交互式環境生成出版質量數據??捎糜谀_本,和 shell,筆記本,Web應用程序服務器等若干圖形用戶界面工具。一般使用以下語句引入。
import matplotlib.pyplot as plt
以下各部分內容:
命令收錄和和線圖、散點圖、直方圖、3維散點圖等各類圖形圖表裝飾項中的繪圖函數小結1. 各種可能用到的命令之收錄(這里還沒有整理完,主要是中的案例語句)
# 引入
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
# 準備data
x = np.linspace(-5, 2, 100) # 100行1列的一維向量,在python中一維向量都是列向量,并且施加transpose命令之后還是列向量,改變不了
np.shape(x) # (100,1)
y1 = x**3 + 5*x**2 + 10 # **代表平方
len(x) # 100 個從-5 — 2 的數值
plt.plot(x, y1)
add_subplot
#默認情況下在subplot外圍會留下一些邊距,使用以下方法可以調整這些間隔,但是有可能會導致坐標軸的標簽重疊
# 代碼會把所有的間距都去掉
fig.subplots_adjust(left=None, right=None,top=None, wspace=None, hspace=None)
# 繪制3維圖像
from mpl_toolkits.mplot3d import Axes3D
ax = plt.subplot(111,projection='3d')
#以上代碼就可創建一個三維工程,接下來的步驟和二維類似,如ax.scatter(X,Y,Z),傳入xyz坐標即可。
# 疊加圖,用一條指令畫多條不同格式的線
t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
# 圖片修飾大類
# plt.text()添加文字說明
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
# plt.annotate()文本注釋,xy表注釋箭頭起始位置,xytext表箭頭末尾(文本起始)位置
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
# 坐標軸范圍
plt.axis([40, 160, 0, 0.03])

plt.xlim(40,160)
plt.ylim(0,0.03)
# 顯示網格
plt.grid(True)
# plt.legend()添加圖例
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
legend(loc='upper left')
# 設置坐標線相對位置和顏色、是否顯示等
ax = gca() # 獲得圖片句柄
ax.spines['right'].set_color('r') # 右側線設置為紅色
ax.spines['top'].set_color('none') # 上側線不顯示,隱藏
ax.xaxis.set_ticks_position('bottom') # x坐標軸放在底側線上顯示
ax.spines['bottom'].set_position(('data',1)) # 底側線處于y=1段,1段為左側線的長度,畫圖就明白了
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0)) # 左側線處于x=0段,1段為底側線長度
補充1:如果你向plot()指令提供了一維的數組或列表,那么將默認它是一系列的y值,并自動為你生成x的值。默認的x向量從0開始并且具有和y同樣的長度python 在圖像上畫線,因此x的數據是[0,1,2,3].
補充2:中一維向量都是列向量,并且施加命令之后還是列向量,改變不了
2. 和和(注意區別命令)
畫板一般由以下部分組成,對應詞語就是相關命令和參數
的圖像都位于對象中,你可以用plt.(1) 創建一個新的. 在使用的時候,會自動彈出一個空窗口,而在使用cmd等其他情況下,必須先在畫板上畫點東西,再調用plt.show()才能出現畫板。
和Axes對象的關系
我們先來看什么是和Axes對象。在中python 在圖像上畫線,整個圖像為一個對象。在對象中可以包含一個,或者多個Axes對象。每個Axes對象都是一個擁有自己坐標系統的繪圖區域
plt.()和plt.()區別
plt.()和plt.() 案例
import matplotlib.pyplot as plt
plt.figure(1) # 第一張圖
plt.subplot(211) # 第一張圖中的第一張子圖
plt.plot([1,2,3]) # 實際就是x=1,2,3, y=1,2,3
plt.subplot(212) # 第一張圖中的第二張子圖
plt.plot([4,5,6]) # 實際就是x=1,2,3, y=4,5,6
plt.figure(2) # 第二張圖
plt.plot([4,5,6]) # 默認創建子圖subplot(111)
plt.figure(1) # 切換到figure 1 ; 子圖subplot(212)仍舊是當前圖
plt.subplot(211) # 令子圖subplot(211)成為figure1的當前圖
plt.title('Easy as 1,2,3') # 添加subplot 211 的標題
() 部分
plt. 是一種簡便的創建圖表的辦法(個人覺得這個方法比()好用,更簡潔),他會創建一個新的 ,并返回句柄,句柄ax是一個數組. (習慣上起名為fig, ax, 也可以叫別的名)
完整參數形如 ..(nrows=1, ncols=1, =False, =False, =True, =None, =None, **) 含義參見
本小節代碼可溯源自
fig,ax = plt.subplots(2, 3)
x = np.linspace(-5, 2, 100)
y1 = x**3 + 5*x**2 + 10
y2 = 3*x**2 + 10*x
y3 = 6*x + 10
y4 = x**2
fig, ax = plt.subplots() #缺省plt.subplots(1,1)
ax.plot(x, y1, color="blue", label="y(x)") # 定義x, y, 顏色,圖例上顯示的東西
ax.plot(x, y2, color="red", label="y'(x)")
ax.plot(x, y3, color="green", label="y''(x)")
ax.set_xlabel("x") # x標簽
ax.set_ylabel("y") # y標簽
ax.legend(); # 顯示圖例
更復雜的例子
x = np.linspace(-5, 2, 100)
y1 = x**3 + 5*x**2 + 10
y2 = 3*x**2 + 10*x
y3 = 6*x + 10
y4 = x**2
fig, ax = plt.subplots(figsize=(8, 5)) # 定義畫布和圖形
ax.plot(x, y1, lw=1.5, color="blue", label=r"$y(x)$")
ax.plot(x, y2, lw=1.5, color="red", label=r"$y'(x)$")
ax.plot(x, y3, lw=1.5, color="green", label=r"$y''(x)$")
# 畫線,畫點,線是由點組成的,可以理解為多個點就組成了線
ax.plot(x, np.zeros_like(x), lw=0.5, color="black") # lw指的是粗細
ax.plot([-3.33, -3.33], [0, (-3.3)**3 + 5*(-3.3)**2 + 10], lw=0.5, ls="--", color="black")# 有時只要知道 x 就行了
ax.plot([0, 0],[0, 10], lw=0.5, ls="--", color="black") # 這個得把相交的點先求值才行
ax.plot([0], [10], lw=0.5, marker='h', color="blue")
ax.plot([-3.33], [(-3.3)**3 + 5*(-3.3)**2 + 10], lw=0.5, marker='o', color="blue")
ax.set_ylim(-15, 40) # 設定y軸上下限

ax.set_yticks([-10, 0, -5, 10, 20, 30])# 故意加一個 -5,有點違和感
ax.set_xticks([-4, -2, 0, 2])
ax.set_xlabel("$x$", fontsize=18) # 設定字體大小
ax.set_ylabel("$y$", fontsize=18)
ax.legend(loc=0, ncol=3, fontsize=14, frameon=False) # loc 等于自己找位置去,ncol 等于列,最后是不要框框
# plt.style.use('ggplot');
4. 線圖、散點圖、直方圖、3維圖等各類圖形
plot繪制線圖,'k--'表示畫黑色虛線圖。k表示黑色,--表示虛線。也可以更明確的給和color傳入參數。color不僅接受英文,也可以用16進制字符串、RGB或RGBA元組來指定顏色。
是散點圖,接受兩個數組作為xy坐標,這里還可以指定點的形狀和顏色。alpha表示的是點的透明度。hist是直方圖他接受一個數組作為數據,bins表示直方圖的總個數,個數越多,條形帶越緊密
以上代碼就可創建一個三維工程,接下來的繪圖和二維類似,因為是三維因此繪圖需要傳入xyz坐標即可。
例如以上代碼就可以在三維坐標上繪制四個點。
5. 圖表裝飾項(線條相關屬性、標簽、坐標范圍、坐標軸刻度、文字說明、圖例、題目等)
(1)線條相關屬性標記設置 參見
線條風格
線條標記
顏色
線條顏色
可以通過調用..()得到支持的所有顏色。
如果這兩種顏色不夠用,還可以通過兩種其他方式來定義顏色值:
很多方法可以介紹顏色參數,如title()。
plt.tilte('Title in a color',color='#')
背景色
通過向如..axes()或者..()這樣的方法提供一個參數,可以指定坐標這的背景色。
示例:(111,=(0.1843,0.3098,0.3098)
確定坐標范圍
plt.text()添加文字說明
下面例子
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# 數據的直方圖
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)

plt.text(60, .025, r'$\mu=100,\ \sigma=15$') #前兩個參數表示文字坐標
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.()文本注釋
考慮兩個點的坐標:被注釋的地方xy(x, y)和插入文本的地方(x, y)
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)
# plt.annotate()文本注釋,xy表注釋箭頭起始位置,xytext表箭頭末尾(文本起始)位置
此處為更復雜的一例子,給特殊點做注釋
t = 2*np.pi/3
# 作一條垂直于x軸的線段,由數學知識可知,
# 橫坐標一致的兩個點就在垂直于坐標軸的直線上了。這兩個點是起始點。
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.()/plt.()設置軸上刻度
# 設置軸刻度
xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
設置坐標線 之顯示數目、顏色、相對位置
# 設置坐標線相對位置和顏色、是否顯示等

ax = gca() # 獲得圖片句柄
ax.spines['right'].set_color('r') # 右側線設置為紅色
ax.spines['top'].set_color('none') # 上側線不顯示,隱藏
ax.xaxis.set_ticks_position('bottom') # x坐標軸放在底側線上顯示
ax.spines['bottom'].set_position(('data',1)) # 底側線處于y=1段,1段為左側線的長度,畫圖就明白了
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0)) # 左側線處于x=0段,1段為底側線長度
plt.()添加圖例
plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')
plt.style.use('')繪制風格(灰色背景)的圖片
import pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot') # ggplot
from sklearn import datasets
from sklearn import linear_model
import numpy as np
# Load data
boston = datasets.load_boston()
yb = boston.target.reshape(-1, 1)
Xb = boston['data'][:,5].reshape(-1, 1)
# Plot data
plt.scatter(Xb,yb)
plt.ylabel('value of house /1000 ($)')
plt.xlabel('number of rooms')
# Create linear regression object
regr = linear_model.LinearRegression() #線性擬合函數實例化
# Train the model using the training sets
regr.fit( Xb, yb) #線性擬合數據
# Plot outputs
plt.scatter(Xb, yb, color='black')
plt.plot(Xb, regr.predict(Xb), color='blue',
linewidth=3)
plt.show()
左側即為風格圖片
plt.()和plt.()設置坐標軸縮放比例
.pie參數