1. 程式人生 > >Matplotlib python 學習筆記2

Matplotlib python 學習筆記2

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()

在這裡插入圖片描述