size = (m,n,3) 圖片的通常形式就是這樣的html
rgb 0-255 jpg圖片 166,255,89 0.0-1.0 png圖片 0.1,0.2,0.6python
灰度處理之後 rgb---->gray 166,255,89 ---> 190 0.1,0.2,0.6 -- > 0.4app
size = (m,n)dom
import scipy.misc as miscide
import numpy as np
import pandas as pd
from pandas import Series,DataFramesvg
import matplotlib.pyplot as plt
%matplotlib inline函數
face_image = misc.face()
plt.imshow(face_image)字體
face_gray = misc.face(gray=True)
plt.imshow(face_gray,cmap='gray')ui
三種方法spa
plt.imshow(face_image.max(axis=2),cmap='gray')
plt.imshow(face_image.mean(axis=2),cmap='gray')
n = np.array([0.299,0.587,0.114])
plt.imshow(np.dot(face_image,n),cmap='gray')
Matplotlib中的基本圖表包括的元素
x = np.arange(-np.pi,np.pi,0.1)
y = np.sin(x)
plt.plot(x,y)
plt.plot(x,np.sin(x),x,np.cos(x))
axes = plt.subplot()
plt.figure(figsize=(8,8))
# 設置字畫布,返回的值就是當前字畫布的座標系對象
axes1 = plt.subplot(2,2,1)
axes2 = plt.subplot(222)
axes3 = plt.subplot(223)
axes4 = plt.subplot(224)
繪製正弦餘弦
設置grid參數(參數與plot函數相同),使用plt面向對象的方法,建立多個子圖顯示不一樣網格線
# 對不一樣的座標系分別設置網格線
plt.figure(figsize=(16,4))
axes1 = plt.subplot(141)
axes2 = plt.subplot(142)
axes3 = plt.subplot(143)
axes4 = plt.subplot(144)
axes1.grid(True)
axes3.grid(True)
# axis參數設置網格線顯示橫縱
axes2.grid(axis='x')
axes4.grid(axis='y')
# 設置線寬、透明度、顏色
# red green yellow blue black orange pink gray white purple cyan
axes1.grid(color='red')
axes2.grid(lw = 2)
axes3.grid(alpha = 0.5)
plt.axis([xmin,xmax,ymin,ymax])
plt.figure(figsize=(4,4))
x = np.linspace(-1,1,100)
y = (1-x**2)**0.5
plt.plot(x,y)
plt.axis([-4,4,-3,3])
xlabel方法和ylabel方法
plt.ylabel('y = x^2 + 5',rotation = 60)旋轉
loc參數能夠是2元素的元組,表示圖例左下角的座標
plt.plot(x,x,x,x*2,x,x*0.5)
# 使用loc參數設置圖例位置
plt.legend(['nomral','fast','slow'],loc=[-0.3,0.3])
圖例也能夠超過圖的界限loc = (-0.1,0.9)
ncol控制圖例中有幾列,在legend中設置ncol,須要設置loc
plt.plot(x,x,x,x*2,x,x*0.5)
# 使用nloc參數設置圖例的列數
plt.legend(['nomral','fast','slow'],loc=9,ncol=3)
修改線條樣式
x = np.random.randint(-20,30,size=(100,3))
df = DataFrame(x)
df
plt.plot(df.index,df[0].cumsum(),linestyle='--',color='red',marker='o')
plt.plot(df.index,df[1].cumsum(),linestyle='-.',color='blue',marker='H')
plt.plot(df.index,df[2].cumsum(),ls=':',color='green',marker='d')
plt.legend(['one','two','three'])
使用figure對象的savefig的函數
# 獲取fig對象
fig = plt.figure()
x = np.arange(-np.pi,np.pi,0.1)
plt.plot(x,np.sin(x))
fig.savefig('dancer.png',dpi=100,facecolor='blue')
fig.savefig('dancer.jpg',dpi=100,facecolor='green')
png = plt.imread('dancer.png')
jpg = plt.imread('dancer.jpg')
display(png,jpg)
plot語句中支持除X,Y之外的參數,以字符串形式存在,來控制顏色、線型、點型等要素,語法形式爲:
plt.plot(X, Y, 'format', ...)
參數color或c
x = np.arange(0,100)
plt.plot(x,x**2,c = 'm')
顏色 | 別名 | HTML顏色名 | 顏色 | 別名 | HTML顏色名 |
---|---|---|---|---|---|
藍色 | b | blue | 綠色 | g | green |
紅色 | r | red | 黃色 | y | yellow |
青色 | c | cyan | 黑色 | k | black |
洋紅色 | m | magenta | 白色 | w | white |
plt.plot(x,x,color='#0000ff')
plt.plot(x,2*x,color = '#00ff00')
plt.plot(x,x/2,color = '#ff0000')
plt.plot(x,x,color=(0.3,0.3,0.4))
alpha參數
plt.plot(x,x,color=(0.3,0.3,0.4),alpha=0.1)
設置背景色,經過plt.subplot()方法傳入facecolor參數,來設置座標系的背景色
# 使用座標系對象繪製圖形
# fig = plt.figure() # 經過此方法能獲得畫布對象
axes = plt.subplot(facecolor='c')
axes.plot(x,x,color = 'g')
plt.subplot(facecolor = 'yellow')
plt.plot(x,np.sin(x),color='red')
參數linestyle或ls
線條風格 | 描述 | 線條風格 | 描述 |
---|---|---|---|
'-' | 實線 | ':' | 虛線 |
'--' | 破折線 | 'steps' | 階梯線 |
'-.' | 點劃線 | 'None' / ',' | 什麼都不畫 |
x = np.arange(0,100,5)
plt.plot(x,x,linestyle = '-',linewidth=1)
plt.plot(x,x*2,linestyle = '--',linewidth=2)
plt.plot(x,x*3,ls = '-.',lw=3)
plt.plot(x,x*4,ls = ':',lw=4)
plt.plot(x,x*5,ls = 'steps',lw=5)
linewidth或lw參數
dashes參數 eg.dashes = [20,50,5,2,10,5]
設置破折號序列各段的寬度
x = np.arange(-np.pi,np.pi,0.1)
plt.plot(x,np.sin(x),dashes=[5,1,10,2,20,4])
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
'1' | 一角朝下的三腳架 | '3' | 一角朝左的三腳架 |
'2' | 一角朝上的三腳架 | '4' | 一角朝右的三腳架 |
x = np.arange(0,10,1)
plt.plot(x,x,marker = '3',markersize=15)
plt.plot(x,2*x,marker = '4',markersize=15)
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
's' | 正方形 | 'p' | 五邊形 |
'h' | 六邊形1 | 'H' | 六邊形2 |
'8' | 八邊形 |
plt.plot(x,x,marker = 's',markersize = 30)
plt.plot(x,2*x,marker = 'p',markersize = 40)
plt.plot(x,3*x,marker = 'h',markersize = 30)
plt.plot(x,4*x,marker = '8',markersize = 30)
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
'.' | 點 | 'x' | X |
'*' | 星號 | '+' | 加號 |
',' | 像素 |
plt.plot(x,x,marker = '.',markersize = 30)
plt.plot(x,2*x,marker = 'x',markersize = 30)
plt.plot(x,3*x,marker = '*',markersize = 30)
plt.plot(x,4*x,marker = ',',markersize = 30)
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
'o' | 圓圈 | 'D' | 菱形 |
'd' | 小菱形 | '','None',' ',None | 無 |
plt.plot(x,x,marker = 'o',markersize = 30)
plt.plot(x,2*x,marker = 'D',markersize = 30)
plt.plot(x,3*x,marker = 'd',markersize = 30)
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
'_' | 水平線 | '|' | 豎線 |
plt.plot(x,x,marker = '|',markersize = 30)
plt.plot(x,2*x,marker = '_',markersize = 30)
標記 | 描述 | 標記 | 描述 |
---|---|---|---|
'v' | 一角朝下的三角形 | '<' | 一角朝左的三角形 |
'^' | 一角朝上的三角形 | '>' | 一角朝右的三角形 |
plt.plot(x,x,marker = 'v',markersize = 30)
plt.plot(x,2*x,marker = '<',markersize = 30)
plt.plot(x,3*x,marker = '>',markersize = 30)
plt.plot(x,4*x,marker = '^',markersize = 30)
顏色、點型、線型,能夠把幾種參數寫在一個字符串內進行設置 'r-.o'
plt.plot(x,x,'r-.o')
參數 | 描述 | 參數 | 描述 |
---|---|---|---|
color或c | 線的顏色 | linestyle或ls | 線型 |
linewidth或lw | 線寬 | marker | 點型 |
markeredgecolor | 點邊緣的顏色 | markeredgewidth | 點邊緣的寬度 |
markerfacecolor | 點內部的顏色 | markersize | 點的大小 |
plt.plot(x,x,marker = 'H',markersize = 30,markeredgecolor = 'm',markeredgewidth=2,markerfacecolor='b',lw=10,c='blue')
屬性名聲明,不能夠多參數連用
plt.plot(x1, y1, x2, y2, fmt, ...)
plt.plot(x,x,x,2*x,color = 'c',ls='--',marker='d')
多個都進行設置時,多參數連用 plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)
plt.plot(x,x,'r-.h',x,2*x,'b-->')
# plt.plot函數,返回值的唄繪製的包含每一條線對象的列表
lines = plt.plot(x,x,x,x*2,x,x*3)
# 能夠經過line對象進行設置外觀
lines[0].set_linewidth(10)
lines[1].set_linestyle('--')
lines[2].set_color('red')
axes = plt.subplot(111)
axes.set_title('axes_title')
axes.set_xlabel('X-Label')
axes.set_ylabel('Y-Label')
axes.set_facecolor('yellow')
axes.set_xticklabels(['-pi',0,'pi'])
axes.set_yticklabels(['min',0,'max'])
axes.set_xticks([-np.pi,0,np.pi])
axes.set_yticks([-1,0,1])
x = np.arange(-np.pi,np.pi,0.1)
axes.plot(x,np.sin(x))
lines = plt.plot(x,x,x,x*2,x,np.sin(x))
plt.setp(lines[0],color='red',ls='--',lw=4)
axes = plt.subplot()
# p->> property屬性
plt.setp(axes,title='title')
plt.xticks()和plt.yticks()方法
x = np.arange(0,10,1)
plt.plot(x,x*2)
# 使用plt來設置座標軸刻度
# 新的刻度標籤最好與原始的刻度標籤保持一致
# eg1:使用原始刻度
plt.xticks([0,2,4,6,8],list('abcde'))
# 在matplotlib裏顯示漢字的方法
# eg2:修改原始刻度
plt.yticks([0,4,8,12,16],['ok','good','very good','good good','vv good'])
LaTex語法,用ππ、σσ等表達式在圖表上寫上希臘字母
x = np.arange(-np.pi,np.pi,0.1)
plt.plot(x,np.sin(x),x,np.cos(x))
# 第一個列表寫新的刻度值,注意不要越界(可能會顯示不出來)
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['-$\pi$','-$\pi$/2',0,'$\pi$/2','$\pi$'])
plt.yticks([-1,0,1],['min',0,'max'])
【直方圖的參數只有一個x!!!不像條形圖須要傳入x,y】
hist()的參數
x = np.random.randint(1,100,50)
x
plt.hist(x,bins=10,normed=True,color = 'r',orientation='horizontal')
【條形圖有兩個參數x,y】
bar()、barh()
x = Series(np.array([3,5,7,8,9,2,4]))
plt.bar(x.index,height = x.values)
plt.barh(x.index,width=x.values)
【餅圖也只有一個參數x!】
pie()
餅圖適合展現各部分佔整體的比例,條形圖適合比較各部分的大小
普通各部分佔滿餅圖
x = [89,45,32,16]
plt.pie(x)
普通未佔滿餅圖
x = [0.1,0.3,0.5]
plt.pie(x)
餅圖陰影、分裂等屬性設置
x = [89,45,32,16]
plt.pie(x,labels=['boy','girl','bgirl','gboy'],labeldistance=0.3,autopct='%1.1f%%',pctdistance=0.8,
explode=[0,0,0,0.2],colors=['m','c','purple','yellow'],shadow=True,startangle=90)
【散點圖須要兩個參數x,y,但此時x不是表示x軸的刻度,而是每一個點的橫座標!】
scatter()
x = np.random.normal(size = 1000)
y = np.random.normal(size = 1000)
# [0.3,0.6,0.8] 這樣的一個數就能夠表示一個顏色
# 隨機生成1000個顏色
color = np.random.random(size = (1000,3))
# s表示marker的大小
plt.scatter(x,y,marker='d',color=color,s = 30)
控制文字屬性的方法:
pyplot函數 | API方法 | 描述 |
---|---|---|
text() | mpl.axes.Axes.text() | 在Axes對象的任意位置添加文字 |
xlabel() | mpl.axes.Axes.set_xlabel() | 爲X軸添加標籤 |
ylabel() | mpl.axes.Axes.set_ylabel() | 爲Y軸添加標籤 |
title() | mpl.axes.Axes.set_title() | 爲Axes對象添加標題 |
legend() | mpl.axes.Axes.legend() | 爲Axes對象添加圖例 |
figtext() | mpl.figure.Figure.text() | 在Figure對象的任意位置添加文字 |
suptitle() | mpl.figure.Figure.suptitle() | 爲Figure對象添加中心化的標題 |
annnotate() | mpl.axes.Axes.annotate() | 爲Axes對象添加註釋(箭頭可選) |
全部的方法會返回一個matplotlib.text.Text對象
x = np.arange(-np.pi,np.pi,0.1)
plt.plot(x,np.sin(x))
# 畫布 fig = plt.figure()
# 座標系 axes = plt.subplot()
axes = plt.subplot()
axes.text(0.5,0.4,'test')
axes.set_xlabel('X-Label')
axes.set_ylabel('Ylabel')
axes.set_title('title')
fig = plt.figure(figsize=(8,4))
axes1 = plt.subplot(1,2,1)
axes2 = plt.subplot(1,2,2)
axes1.plot(x,np.sin(x))
axes2.plot(x,np.cos(x))
fig.text(0.4,0.5,'test')
fig.suptitle('suptitle')
axes1.set_title('title1')
axes2.set_title('title2')
text()
annotate()
以下都是arrowstyle能夠選擇的風格樣式 ``'->'`` head_length=0.4,head_width=0.2 ``'-['`` widthB=1.0,lengthB=0.2,angleB=None ``'|-|'`` widthA=1.0,widthB=1.0 ``'-|>'`` head_length=0.4,head_width=0.2 ``'<-'`` head_length=0.4,head_width=0.2 ``'<->'`` head_length=0.4,head_width=0.2 ``'<|-'`` head_length=0.4,head_width=0.2 ``'<|-|>'`` head_length=0.4,head_width=0.2 ``'fancy'`` head_length=0.4,head_width=0.4,tail_width=0.4 ``'simple'`` head_length=0.5,head_width=0.5,tail_width=0.2 ``'wedge'`` tail_width=0.3,shrink_factor=0.5
x = np.arange(-np.pi,np.pi,0.1)
axes = plt.subplot()
plt.plot(x,np.sin(x))
# 模式1:使用arrowstyle鍵,能夠選擇如上幾種預約義的箭頭樣式
axes.annotate(s='annotation2',xy=[-1.7,-1],xytext=[0.5,-0.5],arrowprops = {'arrowstyle':'fancy'})
# 模式2:不適用arrowstyle鍵,能夠使用{'headlength':10,'headwidth':16,'shrink':0.1來自定義樣式
axes.annotate(s='annotation1',xy=[1.7,1],xytext=[-0.5,0.5],arrowprops = {'headlength':10,'headwidth':16,'shrink':0.1})
練習
三個隨機正太分佈數據
index = np.arange(100)
x = np.random.normal(loc=10,scale=3,size=100)
y = np.random.normal(loc=20,scale=3,size=100)
z = np.random.normal(loc=30,scale=3,size=100)
axes = plt.subplot()
axes.plot(index,x,index,y,index,z)
axes.legend(['plot','2nd plot','last plot'],loc=[0,1.05],ncol=3)
axes.annotate(s='Important value',xy=[50,20],xytext=[15,35],fontsize=15,arrowprops={'arrowstyle':'->'})
導包
使用mershgrid函數切割x,y軸
建立3d座標系
繪製3d圖形
添加colorbar
from mpl_toolkits.mplot3d.axes3d import Axes3D
x = np.arange(100)
y = np.arange(100)
xx,yy = np.meshgrid(x,y)
def create_z(xx,yy):
return np.cos(xx)+np.sin(yy)
z = create_z(xx,yy)
print(z.shape)
axes = plt.subplot(projection = '3d')
p = axes.plot_surface(xx,yy,z,cmap='summer')
plt.colorbar(p,shrink=0.5)
x = np.array([1,2,3])
y = np.array([4,5,6])
xx,yy = np.meshgrid(x,y)
display(xx,yy)
建立極座標,設置polar屬性
繪製極座標條形圖
plt.axes(polar=True)
index = np.arange(-np.pi,np.pi,2*np.pi/6)
plt.bar(x=index,height=[2,3,4,5,6,7],width = 2*np.pi/6)