python_matplotlib繪圖初步學習

maplotlib 繪圖

一、基本繪圖

  • 首先需要導入繪圖工具以及numpy
import matplotlib.pyplot as plt
import numpy as np
  • 繪製一條直線與二次曲線
x = np.linspace(-2, 2, 50)    # -2到2之間的50個點 均勻選取
y1 = 2 * x + 1                # 直線方程  y1 也是50個點
y2 = x ** 2 + 1               # 直線方程  y2 也是50個點
#創建一幅圖
plt.figure()
plt.plot(x, y1)               #繪製直線
plt.plot(x, y2)               #繪製曲線

1. figure()

#  figsize=(10,8) 窗口大小
#  dpi=80         圖像的分辨率
#  facecolor='b' 背景的顏色
plt.figure(figsize=(10, 8), dpi=80,facecolor='b')
plt.figure(figsize=(8, 8), dpi=80,facecolor='r')

2. plt.plot()

  • 繪製直線
# color = 'r'         顏色
# linewidth = 5       線寬
# linestyle = '-'     線類型
plt.plot(x, y1,color = 'r',linewidth = 5,linestyle = '-')    #實線
plt.plot(x, y2,color = 'b',linewidth = 1,linestyle = '-.')   #點劃線
plt.plot(x, y1, color='g', linewidth=3, linestyle=':')       #虛線
plt.plot(x, y2, color='y', linewidth=1, linestyle='--')      #破折線


  • 繪製點
#  marker='o'           標記類型
#  markerfacecolor='b'  標記顏色
#  markersize=20        標記大小
plt.plot(0, 0, marker='o', markerfacecolor='b', markersize=20)
plt.plot(1, 1, marker='*', markerfacecolor='r', markersize=5)
plt.plot(3, 3, marker='x', markerfacecolor='y', markersize=10)

3.plt.subplot()

同個窗口內的多幅圖像

plt.subplot(221)
plt.plot(x, y1,color = 'r',linewidth = 5,linestyle = '-')
plt.plot(x, y2,color = 'b',linewidth = 1,linestyle = '-.')
plt.subplot(222)
plt.plot(x, y1, color='g', linewidth=3, linestyle=':')
plt.plot(x, y2, color='y', linewidth=1, linestyle='--')
plt.subplot(223)
plt.plot(0, 0, marker='o', markerfacecolor='b', markersize=20)
plt.plot(1, 1, marker='*', markerfacecolor='r', markersize=5)
plt.subplot(224)
plt.plot(3, 3, marker='x', markerfacecolor='y', markersize=10)

4. 重新定義座標

# 一種方式,直接用新座標替換
# 第二種方式 替換成文字
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
plt.yticks([-3,-1.8,-1,1.5,3],[r'$E\ E$','D',r'$C$','B','A'])
#  r'$E\ E$'  $$ 顯示字體更標準  空格前必須加\

5. 移動座標軸

# 移動座標軸 ax 就是整張圖
ax = plt.gca()                      #獲取整張圖
ax.spines['right'].set_color('none')#右邊的軸設置成沒有
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 設置x軸的位置在 y = 0處
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))

6. 增加標註

#方式一 在plot中添加label
plt.plot(x, y2,label = 'up')
plt.plot(x, y1,label = 'down')
# # 自動增加標註  loc = 'best' 'upper right'
plt.legend()

#方式二 定義plot名稱  在legend中定義標籤(推薦)
line1, = plt.plot(x, y2)
line2, = plt.plot(x, y1)
plt.legend(handles = [line1,line2,], labels= ['aaa','bbb'],loc = 'best')

二、高級繪圖

2.1 動畫製作GIF

def sintest1():
    fig,ax = plt.subplots()
    plt.xlim(-2 * np.pi * 2, 2 * np.pi * 2)
    plt.ylim(-1.1,1.1)
    x = np.arange(0,2*np.pi,0.05)
    line, = ax.plot(x,np.sin(x))
    line2, = ax.plot(x,np.cos(x))
    text_pt = plt.text(0, 0, '', fontsize=10,color = 'r')
    text_pt2 = plt.text(0, 0, '', fontsize=10, color='b')
    ax = plt.gca()
    ax.spines['right'].set_color('none')  # 右邊的軸設置成沒有
    ax.spines['top'].set_color('none')
    ax.xaxis.set_ticks_position('bottom')
    ax.yaxis.set_ticks_position('left')
    # 設置x軸的位置在 y = -1處
    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))
    def animate(i):
        # plt.xlim(0, 2*np.pi*i/100)
        c = i-200
        x = np.arange(-4*np.pi,2*np.pi*c/100,0.05)
        line.set_xdata(x)
        line.set_ydata(np.sin(x))
        text_pt.set_position((2*np.pi*c/100, np.sin(2*np.pi*c/100)))
        text_pt.set_text("x=%.3f, y=%.3f" % (2*np.pi*c/100, np.sin(2*np.pi*c/100)))

        line2.set_xdata(x)
        line2.set_ydata(np.cos(x))
        text_pt2.set_position((2*np.pi*c/100, np.cos(2*np.pi*c/100)))
        text_pt2.set_text("x=%.3f, y=%.3f" % (2*np.pi*c/100, np.cos(2*np.pi*c/100)))

        # line.set_xdata(x)
        # line.set_ydata(x)
        return line,text_pt,line2,text_pt2
    def init():
        line.set_ydata(np.sin(x))
        line2.set_ydata(np.cos(x))
        return line,line2

    ani = animation.FuncAnimation(fig=fig,func= animate,frames=400,init_func=init,interval=30,blit=True )
    # ani.save('sin_test3.gif', writer='pillow', fps=10)
    plt.show()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章