Matplotlib python 學習筆記2
阿新 • • 發佈:2018-12-15
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y = 2*x + 1 plt.figure(num=1,figsize=(8,5)) plt.plot(x,y) #畫直線圖 # plt.scatter(x,y) #畫點圖 ax = plt.gca() #獲取到當前座標軸 ax.spines['right'].set_color('none') # 將影象的右邊框的顏色設定為透明 ax.spines['top'].set_color('none') #將上邊框設定顏色透明 ax.xaxis.set_ticks_position('bottom') #將影象的下邊框設定為x軸 ax.yaxis.set_ticks_position('left') #將影象的左邊框設定為y軸 ax.spines['bottom'].set_position(('data',0)) #將影象的x軸放在y軸的位置1 ax.spines['left'].set_position(('data',0)) #將影象的y軸放在x軸的位置0 x0 = 1 y0 = 2*x0 +1 plt.scatter(x0,y0,s=50,color='r') # 只畫一個點,size=50,顏色為紅色 plt.plot([x0,x0],[y0,0],'k--',lw=2.5) # 畫出兩個點之間的直線,k是black的簡寫 # --表示線的風格,lw是linewidth的簡寫 # method 1 ######################### plt.annotate(r'$2x+1=%s$' %y0,xy=(x0,y0), # 指向(x0,y0) xycoords='data',xytext=(+30,-30), # 從x座標加30,y座標減30的地方開始畫 textcoords='offset points',fontsize=16, arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) #最後這個引數都是和箭頭的設定有關 # method 2 ########################### plt.text(-4,3, '$This. is. the. some. text.\\mu.\\sigma_i.\\alpha_t$', # 加點的地方視訊裡是\,但是這裡會報錯,視訊裡是花體,這裡也無法顯示 fontdict={'size':16,'color':'r'}) plt.show()
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y = 0.1*x plt.figure() plt.plot(x,y,linewidth=10) #線很粗,把座標軸擋住了 # plt.plot(x,y,linewidth=10,alpha =0.3) # plt.scatter(x,y,linewidth=0.1,alpha =0.3) plt.ylim(-2,2) ax = plt.gca() #獲取到當前座標軸 ax.spines['right'].set_color('none') # 將影象的右邊框的顏色設定為透明 ax.spines['top'].set_color('none') #將上邊框設定顏色透明 ax.xaxis.set_ticks_position('bottom') #將影象的下邊框設定為x軸 ax.yaxis.set_ticks_position('left') #將影象的左邊框設定為y軸 ax.spines['bottom'].set_position(('data',0)) #將影象的x軸放在y軸的位置1 ax.spines['left'].set_position(('data',0)) #將影象的y軸放在x軸的位置0 for label in ax.get_xticklabels() + ax.get_yticklabels(): label.set_fontsize(10) # label.set_bbox(dict(facecolor='grey',edgecolor='red',alpha=0.9)) label.set_bbox(dict(facecolor='red',edgecolor='None',alpha=0.1)) #alpha是不透明度,0.9是有90%不透明,10%透明 #在這裡顯示跟視訊不一樣的是,座標軸上的刻度數字還是被線蓋住了 plt.show()
import matplotlib.pyplot as plt import numpy as np #畫散點圖 n = 1024 X = np.random.normal(0,1,n) #在0到1之間生成n個隨機數 Y = np.random.normal(0,1,n) T = np.arctan2(Y,X) #for color value,用一個函式生成點的顏色的數值 # plt.scatter(X,Y) # plt.scatter(X,Y,s=75,c=T) #還是透明點好看 plt.scatter(X,Y,s=75,c=T,alpha=0.5) #給每個點設定大小,顏色和透明度 #s是size的簡寫,c是color的簡寫,給每一個點一個顏色的數值,alpha是不透明度 # plt.scatter(np.arange(5),np.arange(5)) # plt.scatter([0,1,2,3,4],[0,1,2,3,4]) #這句和上句結果是完全一樣的 plt.xlim((-1.5,1.5)) #設定x軸顯示範圍 plt.ylim((-1.5,1.5)) #設定y軸顯示範圍 # plt.xticks(()) #設定x軸刻度隱藏 # plt.yticks(()) #設定y軸刻度隱藏 plt.show()
import matplotlib.pyplot as plt
import numpy as np #畫柱狀圖或者叫條形圖
n = 12
X = np.arange(n) # 生成0,1,2,3,4,5,6,7,8,9,10,11這12個數字
Y1 = (1 - X/float(n)*np.random.uniform(0.5,1.0,n)) #在[0.5,1)中隨機生成n個數
Y2 = (1 - X/float(n)*np.random.uniform(0.5,1.0,n))
# plt.bar(X,Y1)
# plt.bar(X,+Y1)
# plt.bar(X,-Y2)
# plt.bar(X,+Y1,facecolor='white',edgecolor='green') #自己搞得顏色好難看
# plt.bar(X,-Y2,facecolor='red',edgecolor='None')
# plt.figure(figsize=(15,15))
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') #這樣好看多了
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
for x,y in zip(X,Y1): #設定向上的柱狀圖
# ha:horizontal alignment 水平對齊方式
#va: vertical alignment 縱向對齊方式
plt.text(x +0.05,y +0.05,'%.2f' % y, ha='center', va='bottom')
for x,y in zip(X,Y2): #設定向下的柱狀圖
plt.text(x +0.05,- y -0.05,'-%.2f' % y, ha='center', va='top')
plt.xlim(-.5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())
plt.show()
import matplotlib.pyplot as plt
import numpy as np #畫等高線圖
def f(x,y):
# the height function
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n) # 從-3到3生成256個點
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y) # 生成網格
plt.figure(figsize=(10,10))
# use plt.contourf to filling contours #填充顏色
# X,Y and value for (X,Y) point
plt.contourf(X,Y,f(X,Y),8,alpha=0.75, cmap= plt.cm.hot)
# plt.contourf(X,Y,f(X,Y),100,alpha=0.75, cmap= plt.cm.hot)
# plt.contourf(X,Y,f(X,Y),8,alpha=0.75, cmap= plt.cm.cool)
#use plt.contour to add contour lines
C = plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=.5)
#adding label
plt.clabel(C,inline=True,fontsize=10)
# plt.clabel(C,inline=False,fontsize=10)
plt.xticks(())
plt.yticks(())
plt.show()
%matplotlib inline
# %matplotlib qt5
import matplotlib.pyplot as plt
import numpy as np #列印影象
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
0.365348418405, 0.439599930621, 0.525083754405,
0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
'''
for the value of "interpolation",check this:
https://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html
'''
# plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower')
plt.imshow(a, interpolation='nearest', cmap='bone', origin='upper')
# plt.colorbar()
plt.colorbar(shrink=.8)
plt.xticks(())
plt.yticks(())
plt.show()
# %matplotlib qt5
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 畫3D圖
fig = plt.figure(figsize=(15,15))
ax = Axes3D(fig)
# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y) # x-y 平面的網格
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
# # ax.plot_surface(X, Y, Z, rstride=3, cstride=3, cmap=plt.get_cmap('rainbow'))
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))
#zdir='z' , offset=-2 表示把影象壓倒在z軸上
# ax.contourf(X, Y, Z, zdir='x', offset=-4, cmap=plt.get_cmap('rainbow'))
#zdir='x', offset=-4 表示把影象壓倒在x軸上
ax.set_zlim(-2,2) #這個圖在視訊裡可以旋轉,看不同的角度
plt.show()