論文結果圖:matplotlib和seaborn實現

長安不亂發表於2020-08-07

在論文中,視覺化結果往往很重要,畢竟文字太抽象,需要圖片向審稿人直觀的展現出我們的結果。我也寫了倆篇論文和一篇專利的申請,其中也有一些畫圖的程式,因此記錄,防止以後忘了。由於篇幅原因,文章就不貼程式碼,本文中所有的程式程式碼都在我的github

畫圖程式往往有很多版,畢竟論文寫完了,導師會先看你圖畫的怎麼樣,你覺得畫的挺好的,導師覺得不行,那你就得回去重新畫結果圖,這中間的程式會修改成很多版本,我會從最終版和中間被拋棄的一些版本看看結果視覺化。先看最終版,如果你對後面拋棄的其他版本也感興趣的話,也可以往下看,最後會看看專利中畫的圖。

最終版

最終版論文中,需要畫圖的有

  1. 具有明顯特徵的天文資料,因為我是天文資料處理方向,所以會有天文資料的光譜圖。
  2. 論文中演算法的分析,因為演算法會將資料按照訊雜比分開,因此對每堆資料都要分析,之後還要分析整體的效能。
  3. 與其他演算法的對比,分別是從召回、精確和時間來分析的

天文資料

第一,畫具有明顯特徵的天文資料,天文資料是高維,一般的都會有三千多維,一種就是演算法中使用了很多發射線,需要畫出全部的三千多維,這種會要求標出資料中的發射線資訊,寫法在檔案drawSpectralChinesePaper.py中,畫出的如圖1所示。

論文結果圖:matplotlib和seaborn實現
圖1. 全部光譜圖

還有一種就是隻需要部分發射線,因此並不需要在一張圖中畫出所有的發射線,只需要選取一些具有明顯特徵的波長段畫出來,如果選取的特徵相隔很遠,我們就需要使用子圖來畫,寫法在檔案drawSpectralEnglishPaper.py,畫出的如圖2所示。

論文結果圖:matplotlib和seaborn實現
圖2. 部分光譜圖

演算法效能分析

第二,就是演算法效能分析程式,分析一般都是分析演算法中引數的變化,演算法的精確率和召回率,我分為部分資料的召回和精確,還有就是整體資料的召回和精確。先來看演算法中權重的改變,畫出的圖3如下所示,權重有倆種,一種是綠色的實線,一種是紫色的虛線,區分也較為明顯,這種色調較為明快,寫法在檔案drawAlgorithmWeight.py

論文結果圖:matplotlib和seaborn實現
圖3. 權重變化圖

再看部分資料的召回和整體,色調較暗,並且也需要良好的辨識度,橫縱座標都需要標識清楚,並且字型要清晰可見,召回率圖寫法在檔案picAllRecall.py,召回率畫出的如圖4所示。

論文結果圖:matplotlib和seaborn實現
圖4. 部分資料的召回率圖

精確率圖在檔案picAllPrecision.py,精確率畫出的如圖5所示

論文結果圖:matplotlib和seaborn實現
圖5. 部分資料的精確率圖

還有一種就是演算法中在多個資料集中的精確率視覺化,如圖6所示,虛線代表該資料集中全部資料的精確率,綠色、藍色和橙色柱形代表資料集中部分資料的精確率,程式碼在檔案drawPrecisionInFiveDataEnglishPaper.py

論文結果圖:matplotlib和seaborn實現
圖6. 多個資料集中的精確率圖

對比演算法分析

第三,就是對比實現分析,一般論文這裡都非常重要,體現出論文演算法的優勢,我分析的一般只是召回率、精確率和時間,下面我們先分析精確率和召回率,之後再來看時間。精確率和召回率如果可以放在一起的話,那麼就可以放在一起來展示,如下圖7所示,一共對比了六種演算法,論文演算法WEDA要加粗表示,令別人一眼就看出論文演算法的效能位置,圖中還有虛線和實線來表示召回和精確,圖中因為沒有位置了,所以只能在論文中對圖中的實線和虛線進行說明,程式碼在檔案comparedPrecisionAndRecallEnglishPaper.py

論文結果圖:matplotlib和seaborn實現
圖7. 對比演算法的精確率和召回率圖

如果你對比的太多了,精確率和召回率放在一張圖的話,就會顯得很亂,讓人看不清,那麼就需要重新寫一個來畫圖,還有就是如果期刊要求圖中不能出現彩色來區別類別的話,就需要其他的方式來區分,如圖8所示,論文演算法是FDCC,能讓人清晰的看到,並且每種演算法都能被區分開,用的就是不同的柱形,程式碼在檔案comparedRecallChinesePaper.py

論文結果圖:matplotlib和seaborn實現
圖8. 對比演算法的召回率圖

下面就是對比時間,我們依然會有倆種畫法,一種就是彩色區分,還有一種就是形狀區分,其實和上面的顏色都是一樣,第一種就是彩色,如圖9所示,程式碼就是檔案comparedTimeEnglishColo.py

論文結果圖:matplotlib和seaborn實現
圖9. 對比演算法的時間對比-顏色區分圖

還有一種就是形狀區分,自己在畫圖的時候需要注意,該如何有效並且清晰的區分出所有的演算法,如圖10所示,圖中採用的就是虛線和實線,程式碼就是檔案comparedTimeChinesePaper.py

論文結果圖:matplotlib和seaborn實現
圖10. 對比演算法的時間對比-形狀區分圖

被拋棄的版本

拋棄的版本,我們依舊從上面的三個角度來說

天文資料

第一,畫有特徵的天文資料,如圖11所示,這在圖中有一個小框,來表示另一條比較偏遠的發射線,但是這樣做的畫,很容易讓人誤解它是圖中哪段資料的放大,因此後來被拋棄不用了,程式碼在檔案abandonDrawSpectral.py

論文結果圖:matplotlib和seaborn實現
圖11. 拋棄-部分光譜資料圖

演算法效能分析

第二,演算法效能分析,主要就是演算法中的引數、召回和精確,並且召回和精確是分整體和部分的。先來看引數,分析其效能和引數的聯絡,其中也有後來被拋棄不分析的引數,就是fitness的大小,如圖12所示,我一直覺得這圖很清晰簡潔,很喜歡這圖的顏色分佈。程式碼在檔案abandonFitnessAlgorithm.py

論文結果圖:matplotlib和seaborn實現
圖12. 拋棄-fitness變化圖

再來看部分資料的精確率,這個分好多版本,我們來看倆個版本的,先看圖13,首先這張圖是有底紋的,後來覺得不好看,就把底紋去了,並且這是折線圖,但是圖中的點太多了,密密麻麻的,不美觀,並且圖示例也比較大,影響整體的觀感,後來就被拋棄了,程式碼在檔案abandonRecall.py

論文結果圖:matplotlib和seaborn實現
圖13. 拋棄-部分資料的精確率第一版圖

後來就改了上面的缺點,變成了圖14,這張圖個人感覺沒啥缺點,不要看其中表示的資料變了,那個沒關係,主要看圖,給人的感官,個人感覺挺好,可能就是顏色搭配不好,應該使用暗色調更好一點,後來就被拋棄了。程式碼在檔案middleAbandonPicAllRecall.py

論文結果圖:matplotlib和seaborn實現
圖14. 拋棄-部分資料的精確率第二版圖

整體資料的精確率和召回率,如圖15,這張圖如今看來也是很不好看的,缺點很多,線條畫的不美觀,點過多,資料放的太多,讓人看不清自己想要看的,顯得很雜亂,這樣的畫,得分開畫最好,程式碼在檔案abandonAllPrecisionAndRecall.py

論文結果圖:matplotlib和seaborn實現
圖15. 拋棄-整體資料的精確率和召回率圖

後來分開,但是還是要看一下整體得精確率是如何變化,分析一下演算法在數量多少的時候會達到穩定的狀態,就有了下面圖16,但是這張圖過於單調簡單,反應不出什麼資訊內容,放在論文中,會讓別人認為你在湊篇幅,就拋棄了,程式碼在檔案abandonAllPrecision.py

論文結果圖:matplotlib和seaborn實現
圖16. 拋棄-整體資料的精確率圖

對比演算法分析

我的對比演算法都喜歡放在一張圖中來看,先來看對比精確率和召回率,個人感覺圖17最大的缺點就是不突出自己的演算法,這樣無法讓別人無法一眼就看出論文演算法效能如何,所以後來就拋棄了,程式碼在檔案middleAbandonComparedPreRecallEnglishPaper.py

論文結果圖:matplotlib和seaborn實現
圖17. 拋棄-對比精確率和召回率圖

圖18這是另外一篇中文論文中的,展示對比演算法的精確率,但是這張圖總感覺很單調,缺少一種緊湊感,程式碼在檔案abandonPreciChinesePaper.py

論文結果圖:matplotlib和seaborn實現
圖18. 拋棄-對比精確率圖

後來為了新增資訊,就放入了全部資訊,畫出了圖19,不過感覺這張圖對比不出來,可能最主要的就是因為這是一張折線圖,後來就改成了柱狀圖了,程式碼在檔案abandonComparedPrecisionAndRecallChinesePaper.py

論文結果圖:matplotlib和seaborn實現
圖19. 拋棄-對比精確率和召回率圖

最後就是對比演算法的時間,個人感覺圖20畫的其實還行,我本以為不用常規柱狀圖就不那麼單調,所以就把柱狀橫過來了,後來被改了,論文中的圖片還是嚴肅一點好,程式碼在檔案abandonComparedTimeEnglishColo.py

論文結果圖:matplotlib和seaborn實現
圖20. 拋棄-對比時間圖

中文論文中時間的對比,先是直接用的英文論文中的圖片程式,畫出來的就是圖21,但是期刊要求的是圖片都是黑白的,不能是色彩圖片,因此後來就被拋棄,程式碼在檔案abandonComparedTimeChineseColo.py

論文結果圖:matplotlib和seaborn實現
圖21. 拋棄-中文論文中時間的對比彩色圖

最終改成了黑白的,變成了圖22,但是後來還是被打回來了,對比演算法應該是對比各演算法,突出的就是演算法之間的變化,應該將橫座標變成資料,然後演算法在一起比較,所以被拋棄了,程式碼在檔案abandonComparedTimeChinesePaper.py

論文結果圖:matplotlib和seaborn實現
圖22. 拋棄-中文論文中時間的對比黑白圖

專利圖片

專利中的圖片都是黑白色,有很多圖片都是直接使用論文中的程式畫出來就行了,基本都是變色和將演算法區分開使用到的線條形狀就行了。我們先來看部分資料的精確率和召回率,倆張圖都是一樣的程式,因此這裡只貼出精確率的圖片,圖23來看,就是黑白色,並且變化線條形狀,程式碼在檔案PatentComparisonAlgorithmPrec.py

論文結果圖:matplotlib和seaborn實現
圖23. 專利中部分資料的精確率和召回率圖

後面的對比演算法中全部精確率和召回率也是如此,如圖24,當然專利中的演算法依舊要突出,程式碼在檔案PatentComparisonAlgorithmPrecAndRecall.py

論文結果圖:matplotlib和seaborn實現
圖24. 專利中對比演算法全部精確率和召回率圖

再看對比演算法的時間,個人感覺圖25還是很好看的,也很清晰的對比出各演算法的時間,並且各柱形都有明顯的區別,程式碼在檔案PatentComparisonAlgorithmTime.py

論文結果圖:matplotlib和seaborn實現
圖25. 專利中對比演算法的時間圖

在畫時間的時候,其實還有一張被拋棄的圖片,就是圖26,這張圖也挺好看的,色彩比較淡,但是整體感觀很高,就是它不是黑白的,因此不能放入其中,程式碼在檔案abandonPatentComparisionAlgorithmChinese.py

論文結果圖:matplotlib和seaborn實現
圖26. 拋棄-專利中對比演算法的時間圖

總結

結果視覺化感覺還挺重要,畢竟文字的抽象,只有圖片才能讓人一眼就直觀的看出你想要表達的東西,在論文中,我一般都是使用matplotlib和seaborn實現的,後期就不用seaborn,因為它感覺無法定製自己想要的圖片,還是matplotlin大法才是最好的,可以隨心所欲的畫出自己想要的結果圖片。本文中所有的程式程式碼都在我的github

相關文章