使用matlibplot.pyplot設置畫圖的座標系

今天看了林軒田老師的感知機算法,心血來潮想要做個可視化過程,以便觀察更新的過程。

現將學習成果做個記錄,下面是畫出來的圖,這是初始的狀態,後面會通過算法找到一條經過原點的直線將兩堆數據分割開來。

直線以及兩堆數據是隨機生成的,下面介紹畫出這個圖的步驟主要有哪些:

  1. 導入需要的工具包,這個沒得說,而且是在jupyter notebook中,所有會使用%matplotlib inline

    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline 
  2. 生成數據

    # 設置隨機種子
    np.random.seed(325)
    
    # 隨機生成o數據
    o_data_x = np.random.randint(40, 80, 5)
    o_data_y = np.random.randint(20, 80, 5)
    o_label = np.array([0,0,0,0,0])
    
    # 隨機生成x數據
    x_data_x = np.random.randint(10, 50, 5)
    x_data_y = np.random.randint(60, 90, 5)
    x_label = np.array([1,1,1,1,1])
    
    # 隨機生成初始的直線
    w1_w2 = np.random.random(2)
    t = np.linspace(-100,100, 18)
  3. 畫圖

    # 設置畫布
    plt.figure(figsize=(8, 8))
    
    # 作點
    plt.scatter(o_data_x, o_data_y, c='b', marker='o', label='0')
    plt.scatter(x_data_x, x_data_y, c='r', marker='x', label='1')
    plt.legend()
    
    # 作初始線
    plt.plot(t, -w1_w2[0]/w1_w2[1]*t)
    
    # 獲取當前的座標軸, gca = get current axis
    ax = plt.gca()
    
    # 設置標題,也可用plt.title()設置
    ax.set_title('Inital', fontsize=20, loc='left')
    
    # 設置右邊框和上邊框,隱藏
    ax.spines['right'].set_color('none')
    ax.spines['top'].set_color('none')
    
    # 設置x座標軸爲下邊框
    ax.xaxis.set_ticks_position('bottom')
    # 設置y座標軸爲左邊框
    ax.yaxis.set_ticks_position('left')
    
    # 設置x軸, y軸在(0, 0)的位置
    ax.spines['bottom'].set_position(('data', 0))
    ax.spines['left'].set_position(('data', 0))
    
    # ax.set_xticks與plt.xticks功能一樣,都是自行定義x座標軸的刻度;y軸同理。在這裏使用避免原點出現兩個同樣的0
    ax.set_xticks([-100, -75, -50, -25, 0, 25, 50, 75, 100])
    ax.set_yticks([-100, -75, -50, -25, 25, 50, 75, 100])
    plt.savefig('output.jpg')

總結

上述畫圖涉及的知識點包括:

  1. 畫直線圖
  2. 畫散點圖
  3. 設置座標軸的原點、刻度等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章