好,那最後呢我們就稍微再展示一下,如果有時候你有一些心願, 比如說如果我們想要 add coordinate labels 的話,行不行?它的意思就是說,我能不能在這個畫出 scatter plot 的時候在每一個點上面順便標記它的這個 coordinate label 呢? 哦,可以的,基本上一樣,你想做這件事情,現在最好的 方法大概不是看影片,而是去 google 或者是去 搜尋, 如何在 scatter plot 上面加上 label,in python, 這樣子,這麼做那你就會看到各式各樣的 example,然後你就一個一個試試看, 你最終會這麼做的。 好,讓我們來試一下,我們這裡,就如剛剛所說的,我們先建一個 figure, 然後我們這個 figure 呢要來 add subplot, 那 subplot 是什麼?基本上就是一個子圖的概念啦, 那你說,這個東西在寫什麼東西,看不大懂啊, 老實說,我也看不懂,這個並不是一個推卸責任的話, 我呢,也是上網去把某一個檔案,把某一個人寫的 example 複製下來, 然後呢做我所需要的修改,然後呢把它呈現在大家的 面前。 所以,好,我們現在先繼續,我們先得到了一個 subplot,這個 ax 這個東西是幹嘛用的嘞? 就是說啊,我們先算出 range,然後我 ax 來 set x limit, 再算出 range,ax 再去 set limit,所以現在這件事情做的跟剛剛都很像, 然後呢我再去 plot,這個也沒有什麼問題,但最後就是在我們這個 subplot 上面,我們想要來做 annotation,那我們在幹嘛呢? 我們今天做的事情基本上就是說,我啊去 x,y 的這個資訊裡面呢把值一組一組地讀出來, 每當我讀出一組值的時候,我就使用 ax.annotate 這個函數,然後呢我就把資訊傳進去, 我告訴它要標在什麼地方,我也告訴它要標什麼東西出來, 然後呢我們再來 savefig,那很多時候你看到 example 的時候會有點看不懂, 沒關係,看不懂,想辦法把它抓下來,先跑跑看,再說。 所以呢,大概會出現像這個樣子的畫面,那我們來試一下。 好,我們這裡有 plotter4 plotter4 呢就像我們剛剛所說的,它做的最主要的事情是修了這一段, 也就是說,它有這個 ax 呀,有這個 annotate 之類的,那我們來看看 O 不 OK。 好,所以我改成執行 plotter4, 好,開始,那我們就來試試看,比如說來個 1,2,3,4,5, y 呢就給它 8,3,5,4,1, 這個時候 plot,那你就會發現,這個熒幕上確實是跑出字來啦, 但是跑出來的東西說對好像也有點不大對, 對吧?比如說這裡有什麼,這個首先先看點,點開起來沒有錯,位置都確實是對的, 但是跑出來的東西,這裡跑出來個 8.0, 3.0,5.0,4.0,1.0,欸, 好像是有 y 的資訊,但是沒有 x 的資訊, 對吧?那你回去看一下程式嘛,我們今天在這裡, annotate,annotate 的時候,前面加的是把 y 轉成 string, 那,把 j 轉成 string,j 看得出來是 y 裡面的資訊嘛, 所以也難怪我們只顯示了 y 的資訊,看起來後面這個應該是講坐標, 而這個應該是講印出什麼字,所以呢如果你想要的話,你可以試試看, 這裡的 str,如果不要只有 j,而是把 i 跟 j 混在一起,加個逗點,加個圓括弧什麼的, 能不能印出不同的字樣?而這裡, 這裡呢,我們現在就是穿 i 跟 j,看起來略微地有一點黏在一起, 能不能把它分開一點呢?好,這個我就不告訴你啦, 為什麼?因為我們這門課已經到了盡頭的盡頭, 今天講的東西呢,已經是我們最後一個 lecture video 了, 我們今天講這些東西幹嘛嘞?我們想要告訴你說,人們會畫 gui 真的是很棒, 但是呢我們不是真的只為了教你 gui,而有今天的 lecture, 事實上它也是想要告訴你說,我們人們在 有一些開發上的需求,我們有一些產品上的需求了以後, 它會進而影響我們寫程式的模式, 以前有這種寫法,現在有這種寫法,以前用 procedure 來解體,現在有 OOP,有 class,有 object,有繼承, 讓我們可以比較好地寫出視窗程式, 這些事情並不會是永遠不變的, procedure 和 OOP 以外, 還有很多種其他的程式設計的思維,是大家如果 不去學更進階的課,或者是沒有進入這個產業的話就不會知道, 但是沒有關係,因為你要的任務是能夠解決你現在的問題, 那我想強調的事情,這個東西是跟我們 人生的學習歷程,或者是跟人類知識的演進其實是很像的, 人吶,以前,就是能吃飽,能活下來就好了,所以種田啊,打獵呀之類的, 後來呢,我們開始想要在世界各地快速地移動,那我們就來發明汽車吧, 後來呢,我們想要有很多汽車啊,那我們來發明自動化生產吧, 後來呢,我們又發現,我們想要做高速運算啊,那我們來發明電腦吧, 那有了電腦以後,我們要怎麼樣能夠有效率地製造出電腦呢? 我們又可能需要新一代的精密工業,再後來我們有網路產業,再後來我們可能有人工智慧,- 等等的, 很多的時候呢就是因為有新的需求, 因此產生了新的生產方式,這想必大家都可以接受。 今天的程式設計的世界裡面,新的需求就好比我們想要做視窗程式, 因此我們有了新的生產方式,就是寫 code 的思維,做 program 的思維, 大家未來的人生也是一樣的,你在不同的年級,不同的 年紀,不同的階段,或者是人類演化到不同的程度了以後, 你會有不同的生活上的需求,工作上的需求, 你要做的事情不只是去迎合一個又一個的需求,而是你可能要去思考, 如何有新的生產方式,這件事情最終只有你能告訴你自己, 你可能要改變你學習的方式,可能要改變你工作的方式,可能要改變你跟家人相處的方式, 但總之,就像 gui 的發展會影響人們寫程式,生產程式的方式, 你的人生,不同的階段,會讓你做不同的生產方式。 絕大多數的時候呢,我們在未來並不會真的去寫 gui, 對吧?畢竟你們大多都不會當工程師,甚至於會當工程師的大家,很多也不會真的去寫 gui, 但即使如此,知道怎麼寫 object,怎麼寫 class,怎麼寫繼承,還是很不錯的, 知道如何做 modularization,或者是對它有更深一步的了解,也是很不錯的。 你可以看到每一個 button 都是一個 object,或者是我們用函數把 重複的事情並在一起做啦,然後呢知道有 event listener 還是很重要的, 當你學到一個階段了以後,你會覺得很多東西感覺跟自己的人生還真的是有點像, 對吧?模組化的概念,對解體,或者是做你人生要做的事情,或者是各種這個團隊分工, 都有一定的關聯性,OK?或者是像物件,class 把東西包在一起給人家用,像繼承,別人寫好的東西你拿來用, event listener,等人來敲門,之類的, 你可以發現,人寫程式的思維和人生活的思維會有一些對應, 這也是很正常嘛,畢竟程式語言是人發明的。 好,那麼最後, 今天呢,我們剛剛給你的例子,為什麼特地地講的很模糊, 它絕對是故意的,絕對不是我們特地拿了一個半成品就來給你看, 而是你今天到這裡,聽課已經聽到一個極限了, 我們這門課不會再從老師的嘴巴里講出任何東西來教你, 而是就到此為止,你在未來呢會經常遇到各式各樣這種,像剛剛一樣 寫了一半,好像有用,但是又不夠用的 program, 這個時候你怎麼辦呢,不管你是要加新的 widget 啦, 加更多 powerful application 啦,或者是改 function 啦, 或者是像剛剛那樣子,我們給你一個 program,你想要把它變得更好啦, 只能靠你自己了,要麼你試試看,不然你就 上網查,不然你就問別人,說到底,最後,學習是自己的事情,對吧? 學程式設計這件事情為什麼值得推廣?有很多理由, 但其中一個理由呢,它還是在 它可以讓我們練習自學,因為我們透過程式設計的學習過程,我們一定會去查資料, 而且這個資料有非常非常多,都存在在網路上,存在在各式各樣的學習資源裡面, 那麼呢,大家透過這樣的流程,反復不斷地做, 最終你很容易,或者說比較容易會養成一個我遇到問題,我就要解決它 的習慣,那麼對大家呢都是很好的。 所以這門課呢,影片的部分也就到此為止啦,那有用沒用, 不知道,希望對大家能夠帶來一些正面的影響,這樣就最好啦。 好,我是孔令傑,那這個課就到此結束,謝謝大家。 [音樂] [音樂] [音樂]