2012-08-16 71 views
2

matlab2tikz是一個偉大的軟件包,用於將matlab/octave數字轉換爲tikz代碼。matlab2tikz生產重型排版tikz代碼

但是,如果圖中包含很多點,則結果tikz代碼對於排版膠乳非常重。有時甚至編譯失敗,消息:TeX capacity exceeded, sorry

有沒有辦法解決這個問題?

回答

4

matlab2tikz有一個非常巧妙的選擇下采樣轉換爲tikz-pgf期間的數字。它被稱爲minimumPointsDistance。這在大多數時候都可以彌補這種情況。

但是,當實際點數保持非常低時,它有時會扭曲曲線的某些「僵硬」區域。這在下面的圖像

enter image description here

藍色曲線(1184點)中示出的是原而紅色酮(117點)爲降低。失真很明顯。

爲了解決這個問題,同時保持點數低,我寫了一個新的點減少算法,它更有效(但有時可能會更慢)。結果(紅色曲線是116點)

enter image description here

清楚的是,失真消失。

但仍有

多一個缺點

存在於兩種算法。當一個人將一批數字轉換爲tikz時,他們通常希望所有縮小圖的統一質量。但有時這是不可能的(至少沒有額外的努力),因爲通常minimumPointsDistance必須針對圖中的每一個設置不同,並且結果實際上取決於區間[min_y,max_y]和[min_x,max_x]的大小,以及圖中的點數。

因此,爲了克服這個問題,並且使得minimumPointsDistance能夠被統一設置爲對於所有圖的特定值,產生統一質量的縮減版本,使用歸一化,並且現在「內部」指的是實際大小打印在紙上的圖。

您可以根據說明從here下載修改後的matlab2tikz.m文件。

注意說窮盡測試沒有做出來所以要小心!

2

(A位長的評論)

您可以使用matlabfrag,它轉換你身影的EPS和編譯乳膠,替換字符串數據乳膠字符串。這樣你就不會有太多樣品的問題。子採樣是壞的(除非你有100k點),因爲你想保持高分辨率的矢量數字。

例子:http://www.mediafire.com/view/?atstyyu4bj198wp

+0

+1給予好評,這是我用過的策略和它一直很好。儘管如此,我更喜歡tikz圖形的感覺。 – niels 2012-08-16 18:52:05