Matlab 出版繪圖
論文繪圖是完成學術論文的一個重要環節,美觀的插圖能夠更好地闡述結論和有效地提升文章質量。學術論文中常見的插圖包括:框架圖,演算法說明圖,數據分析圖,以及實物圖。常見的繪圖工具中包括Matlab,python,origin等。Matlab雖然具有強大的計算功能,但繪圖往往過於呆板。可是,筆者發現,很多人都仍希望在Matlab上繪圖(其他軟體具有學習成本或項目需求等原因)。那麼,SCI投稿Latex撰寫過程,如何用matlab來繪製美觀數據分析圖?
為了使耦合性更少,用matlab來繪數據分析圖的步驟包括四步,首先是數據預處理(包括程序處理完後存儲,導入和預處理),第二步是創建數據分析的基礎圖(這一步關鍵是邏輯的處理與圖的表現形式的選擇),第三步是美化(這一步是讓matlab繪出的圖能夠盡量美觀,但沒必要花過多的時間,並且需要一定的審美能力),第四步是後處理。
# 數據預處理
該步驟需要確定好,需要分析的數據是什麼。並且通過實驗將這些數據記錄。這一步是繪製圖形的基礎。
需要用到的命令:load
# 創建數據分析的基礎圖
要說明的是,當然也可以直接在基礎圖修改屬性,但是這樣會使得程序修改起來非常的不方便,有時候想改一個東西還要找半天。而採用基礎圖與美化的兩步驟,則較好地將這種情況避免了。下面基礎圖從單圖與多圖兩個方面介紹,多圖是單圖的一種特殊情況。
## 單圖
1. 繪製和設置圖布,需要用到的命令是figure。
關於圖在屏幕上顯示的**位置**和**大小**用屬性Position調整,Position屬性是以屏幕左下角為原點,[left bottom width height],單位是通過Units屬性選擇(inch或pixel,其中1inch大約為2.5厘米,所以能夠很快的估計出想要出現的位置)。
Figure1=figure(Units, inch/pixels, Position, [5 5 5 3]/[left bottom width height]);%position是設置figure在屏幕中的位置,對圖像的輸出不影響!hold on;
關於調整圖像的性質,可以使用自命名句柄,或者gcf(get current figure)。
2. 圖布中的點與線的繪製,需要用到的命令包括plot,line,errorbar
關於plot的一些基本屬性可以參考:http://blog.sina.com.cn/s/blog_61c0518f0100f0lg.html。在此要提到的是,所有的plot句柄都需要命名,以方便後面美化的處理。另外,建議axis放在首個plot後面。坐標軸的選擇滿足黃金分割點,不可過滿或過疏。
hFit = plot(xfit, yfit ); hold on;axis([xmin xmax ymin ymax]);hE = errorbar(xdata_m, ydata_m, ydata_s);hData = line(xVdata, yVdata );
3. 圖布中的其他圖形的繪製
1)標註
標註包括矩形和箭頭,矩形的命令為rectangle,箭頭的命令為annotation/arrow(file exchange: https://au.mathworks.com/matlabcentral/fileexchange/278-arrow)
rectangle(Position,[left bottom width height],LineWidth,2,EdgeColor,r);
2)柱狀圖,需要命令為bar
3)餅狀圖,三維圖
4. 圖布中的圖示說明 (xlabel,ylabel ,legend,text,title...)
1)legend可以將之前命名的plot的句柄顯示在圖上作為圖標。
2)xlabel和ylabel確定位置和命名。
hlegend=legend([pltname1, pltname2, pltname3…],』DisN1』 , 』DisN2』 , 』DisN3』 …);hXLabel=xlabel(x(m),Position,[110,-2.2],FontSize,10);hYLabel=ylabel(y(m))
需要注意的是,圖示說明也需要命名句柄。
3)title
hTitle=title (My Publication-Quality Graphics);
## 多圖
Matlab自帶的subplot有很多不能自動設置的地方,因此找到了幾個學習成本較低的替代方案:
1. subaxis
https://au.mathworks.com/matlabcentral/fileexchange/3696-subaxis-subplot
2. tight-subplot
https://au.mathworks.com/matlabcentral/fileexchange/27991-tight-subplot-nh--nw--gap--marg-h--marg-w-
但是根據個人經驗,在多圖上花的時間過長,最後到latex中排版時,仍然費力不討好。所以最好還是採用單圖的方式,然後利用ps或ppt或word或visio工具來拼湊成多圖。當然,如果確有簡便直接的方法保證在latex中顯示美觀,歡迎告之以補充改正。
# 美化
## 基礎美化
基礎美化包括matlab基礎圖形句柄屬性的熟悉。常見的命令包括:
線(默認):『Color』是顏色,』LineStyle』是線型,『LineWidth』是線寬;
標記(』Marker』): MarkerFaceColor是邊顏色,MarkerEdgeColor是內部顏色,MarkerSize是大小;
字體:』FontSize』是大小,』FontWeight』是粗細,』Interpreter』=』Latex』。
## 論文高級美化
對於IEEE的論文,筆者進行了一些嘗試與調研,得到以下一些經驗。
* 粗線粗標(thicker lines and larger markers);(根據實際點的個數衡量)
* 設置參考
| Item |Default| Paper |Presentation |
|---|---|---|---|
|Width| 5.6 |varies/3.5(IEEE)? |varies|
|Height |4.2 |varies/3.5(IEEE)? |varies|
|AxesLineWidth| 0.5| 0.75 |1|
|FontSize| 10| 10| 14|
|LineWidth| 0.5| 1(ERRORBAR)/1.5(OTHERLINE)| 2|
|MarkerSize|5/6| 8 |12|
* 顏色配色
其實很多時候,說matlab不好看,是因為不會配圖。因此,可以找專門的RGB配色網站,保留常見的配色方案,供論文中配圖使用。比如,我找到的一個配色網站:
http://colorbrewer2.org/#type=sequential&scheme=YlGnBu&n=3
該網站的核心是,繪圖盡量要用漸變色,少用對比色。而漸變色的選擇可以從2種到12種,基本能夠滿足論文的需求。
另外,還有:
http://blog.csdn.net/peter_zhang_jie/article/details/44179699
該網站將ggplot和Tableau的配色方案相應對比。該文中提到一個好用的小工具,即顏色拾取器,能夠方便地獲取論文中的配色。http://www.colorschemer.com/
# 後處理
## 輸出
1. 輸出eps格式
set(gcf, PaperPositionMode, auto);print -depsc2 finalPlot1.eps
2. 輸出word-png格式
print(improvedExample,-dpng,-r600);%-dxxx,-rnnn %%IEEE要求是600DPI
xxx表示輸出格式,nnn表示圖片的解析度,單位是像素/英寸(dots per inch,DPI)。
dxxx包括:-depsc、-dpdf(print(FillPageFigure,-dpdf,-fillpage/-bestfit))、-djpeg
# 需要注意的問題
1. 用相對值annotation生成的符號,列印的時候位置錯亂;
2. 用絕對值生成的text,列印的時候位置也會錯亂;
3. 一般默認的情況下,legend會按照畫圖的順序逐一標出點、線等要素的標識,如果其中有些點線不想標出標識,該怎麼辦?
R: set(get(get(h,Annotation),LegendInformation),IconDisplayStyle,off); % h是某一要素的句柄
4. 如何去掉坐標軸的刻度值?
R: set(gca,xtick,[]);
# 參考文獻
1. 如何在論文中畫出漂亮的插圖?https://www.zhihu.com/question/21664179/answers/created?page=3
Python繪圖入門:http://codingpy.com/article/a-quick-intro-to-matplotlib/
http://matplotlib.org/
2. Matlab繪圖基礎
http://blog.sciencenet.cn/blog-3854-760545.html
http://blog.sciencenet.cn/blog-3854-803431.html
3. 新手必看,體系全面的畫圖入門教程:
https://dgleich.wordpress.com/2013/06/04/creating-high-quality-graphics-in-matlab-for-papers-and-presentations/
4. making pretty graphs in Matlab step by step
https://blogs.mathworks.com/loren/2007/12/11/making-pretty-graphs/
5. 畫圖進階教程:
http://www.matlabtips.com/beautiful-plots-in-matlab/
推薦閱讀: