Re: [問題] 數據跑出來的圖與使用在Latex上的關係 已回收

看板MATLAB作者 (築夢踏實)時間15年前 (2010/12/10 04:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
前文恕刪... 斗膽獻醜一下 以下是小弟處理MATLAB圖形的心路歷程 尚未寫完 剩下自製的比較範例 晚點補上 ==================== 使用MATLAB處理一些問題 最後要呈現的結果常常會是 「圖」 最簡單的例子就是用plot指令 可以在一個figure視窗中繪製簡單的曲線圖 可是 畫好的「圖」 要怎麼放進報告或投影片裡呢? 我最一開始用的就如同大家所想的那種 PrintScreen拍照法[1] 這種方式看似快速方便 其實問題很多 像是解析度不佳 還有擷取到的圖片大小比例不一等等 過一陣子發現在figure視窗的選單中有個File->Export Setup...[2] 這可以輸出各種格式的圖 還可以對輸出做一些設定 我很快的就選到了相較於jpg感覺色彩上較不失真的png 而這個方式亦使的擷取到的圖片大小比例是固定的 當自己的研究比較進入狀況後 遇到一個問題 就是程式(.m檔)已經寫好了 實際執行時仍然需要個別修改一些參數 依照不同的參數可以繪製出不同的圖形 每次修改參數 將圖畫出來後 還要再手動調整圖片及存檔 似乎稍嫌麻煩了些 因此就有了將所有需要針對圖形做調整的指令直接寫在程式中的念頭 例如線寬、mark、label、legend等等的設定 都可以由簡單的指令完成 為了在程式中加入圖片存檔的功能 我使用print指令[3] 利用迴圈改變各種參數,將各種調整圖形的指令以及print指令加入迴圈中 再配合是當的圖檔檔名設計 即可達成一幾乎全自動化的功能 仔細看一下[3]中的可輸出的各種圖形格式 發現圖可分兩種 點陣圖(Bitmap)與向量圖(Vector) 點陣圖我有聽過...什麼是向量圖呢? 向量圖是根據圖檔中的各種描述 運算出圖上點線面應該所在的位置 再繪製出的圖 因此這種圖形就沒有放大後模糊的問題 因為放大縮小時電腦會重新計算 也可以說 這種圖形的解析度是無限大的 還有一個特色是 向量圖中 字就是字 線就是線 而且字是可以被檢索的 相對於點陣圖 向量圖在大部分情況中更適合作為科學的圖形 很幸運的 我很快就找到適合使用的向量圖格式 它就是EPS(Encapsulated PostScript) 在print指令中加入'-depsc'參數即可產生彩色的EPS圖形[3] 說到這時有些沒用過eps的板友可能已經開始嘗試了 可是你也許會發現 怎麼產生的圖檔都沒辦法看?(OS:All MS Windows) 那是因為Windows沒有內建可以讀EPS的軟體 需要另外安裝 例如GSview[4] 另一個問題是要怎麼把EPS圖放至我們的報告或投影片中? 我確定Word可以插入EPS圖片 作法就如同插入一般圖片相同 至於PowerPoint我則沒機會測試 我想應該是可以的 將EPS圖片插入Word後 看起來非常的醜怪 這個問題本板前幾個月有討論過了 解決方式就是不需要處理 其原因應只是Word在製作EPS的縮圖上稍嫌不足 用印表機印出來或是轉檔成PDF後看起來即會是完美的圖形 可能有人還有疑問 為什麼不使用PDF('-dpdf')而要採用幾乎被前者淘汰的EPS? 原因前面有人提過了 就是把圖片輸出成PDF時Matlab會預設使用整張A4 這樣的圖片大小並不合用 而且可能還會超過A4的邊框而無法顯示圖片部分內容 而且Word與PowerPoint並不能將PDF當做圖片插入文件中 (其實Mac中的Office可以) 至於圖片大小的問題 用可編輯PDF的軟體裁切其內容即可解決 不過裁切的大小可能不固定 且超出A4紙張範圍的部份是救不回來的... 目前我還沒有找到方法能解決print輸出成PDF這個問題 到此也許我們可以做個小結: 使用print指令將繪製好之圖形輸出成EPS檔 如此即可得到一品質優良之成果 這是一個很優秀的作法 可是 這樣真的就足夠了嗎?? 接觸\LaTeX\後即被其優異的性能所深深吸引 並且期許自己以\LaTeX\撰寫排版畢業論文(後來的確這樣做了) 之後亦使用到Beamer這個套件來製作投影片 所以等於是取代Word與PowerPoint的功能 \TeX\的精神是 也許它並不是提供一個最快速方便的工具 不過 它主要的訴求 是讓一般人也可以製作出媲美專業水準的高品質排版 在把所有的paper work的基礎都\LaTeX\化後... 我再回頭看看MATLAB畫的圖 跟整份文件內容的質感其實還是有落差 MATLAB繪圖預設使用的字體是Helvetica 這是一種歷史悠久且相當優雅的無襯線黑體字 不過我的論文的字體英文部分使用有襯線的Times 中文使用cwTeX楷體 Matlab可以修改figure使用的預設字體 可是其實Matlab無法在figure中填入中文字 而且Windows內建的Times New Roman與Type1的Times外表上即有顯著的差別 而我的投影片的字體方面英文是Helvetica 中文則是cwTeX粗黑體 為了版面美觀及一致性 是否我需要準備兩套使用不同字體的圖? 再說如果我想要在Legend(或其他位置)中填入較複雜的數學式(或中文)呢? 亦或是我想要在圖中加上更複雜的一些「東西」? 因此使用Matlab繪製圖形已經沒辦法滿足我的需求... 我要的答案可能得從\LaTeX\中找尋 \LaTeX\有很多的方法可以繪製很優秀的向量圖形 可是有些方法可能需如土法煉鋼般一筆一劃做起(ex:METAPOST PSTrick)[5-6] 一張曲線圖可能有外框、x,ylabel、x,y軸、gird、legend、title等結構 這些其實都是重覆的步驟 但是又需要針對細微的部份做調整 我不可能每張圖都重頭畫 很幸運的(又) 我找到了這個繪圖套件 pgfplots[7] 這是一個專門用來處理2D/3D的直角/對數座標的套件 它可以繪製一般的曲線、長條圖等等圖形 並有很多參數可以對圖形做調整 其input的資料可以為直接輸入各點、曲線函數、或是讀取外部檔案取得 經由很簡單且直覺的設定即可完成含有一些複雜結構的精美圖形 且其繼承了\LaTeX\各繪圖套件的一項特點:字的部份交由\LaTeX\排版引擎處理 如此即可很輕鬆的填入複雜的希臘字母、數學式,甚至中文 觀察仔細點 會發現連座標軸上的數字與label中填入的說明文字也不大相同 這是因為\LaTeX\在數學模式中預設使用較Times較為纖細的Computer Modern字體 也就是說圖形中的字體設定都會依照\LaTeX\文稿的整體設定來調整 而在繪製pgfplots圖形的同時亦可使用其來由的PGF/TikZ這套強大的繪圖套件[8] 所以可以直接在圖形中加上一些較複雜的部分 在[9]中有一些TikZ的範例 其中包含多種不同領域可能會用到的圖形 亦有pgfplots範例 利用一個很簡單的轉換即可將MATLAB中的資料import到pgfplots中 首先先將該曲線的x軸向量與y軸向量分別都轉成列矩陣 並且並排在一起 接著再利用加入'-ascii'參數的save指令將結果存入一檔案中[10] 例如: %%%%%%%%%%%% xx=0:0.1:1; yy=sin(xx); %這時xx與yy都是行矩陣 tmp=[xx' yy']; save('foo.txt', 'tmp', '-ascii'); %%%%%%%%%%%% 接著在文稿內之pgfplots環境中讀取'foo.txt'這個檔案即可 詳細的操作方式請參考[7] 參考文獻 [1] Microsoft, ``Take a Screen Shot,'' 2006. [Online]. Available: http://www.microsoft.com/windowsxp/using/setup/tips/screenshot.mspx [Accessed Dec 10, 2010]. [2] MathWorks, ``Preparing Graphs for Presentation,'' MATLAB Documentation, 2010. [Online]. Available: http://www.mathworks.com/help/techdoc/learn_matlab/f3-34927.html [Accessed Dec 10, 2010]. [3] MathWorks, ``Print Figure or Save to File and Configure Printer Defaults,'' MATLAB Documentation, 2010. [Online]. Available: http://www.mathworks.com/help/techdoc/ref/print.html [Accessed Dec 10, 2010]. [4] GSview, 2008. [Online]. Available: http://pages.cs.wisc.edu/~ghost/gsview/ [Accessed Dec 10, 2010]. [5] J. D. Hobby, ``METAPOST -- A User's Manual,'' MetaPost Development Team, 2010. [Online]. Available: http://www.tug.org/docs/metapost/mpman.pdf [Accessed Dec 11, 2010]. [6] T. V. Zandt, ``PSTricks -- User's Guide,'' 2003. [Online]. Available: ftp://ftp.ccu.edu.tw/pub/tex/graphics/pstricks/base/doc/pstricks-doc.pdf [Accessed Dec 11, 2010]. [7] C. Feuersanger, ``Manual for Package pgfplots,'' 2010. [Online]. Available: http://pgfplots.sourceforge.net/pgfplots.pdf [Accessed Dec 11, 2010]. [8] T. Tantau, ``The TikZ and PGF Packages,'' 2010. [Online]. Available: http://sourceforge.net/projects/pgf/ [Accessed Dec 11, 2010]. [9] TeXample.net, ``TikZ and PGF Examples.'' [Online]. Available: http://www.texample.net/tikz/examples/ [Accessed Dec 11, 2010]. [10] MathWorks, ``Save Sorkspace Variables to File,'' MATLAB Documentation, 2010. [Online]. Available: http://www.mathworks.com/help/techdoc/ref/save.html [Accessed Dec 11, 2010]. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 221.120.64.254 ※ 編輯: iccfish 來自: 219.85.140.154 (12/10 19:13)
文章代碼(AID): #1D0KC2pC (MATLAB)
文章代碼(AID): #1D0KC2pC (MATLAB)