[心得] 座標軸上小數點刻度位數統一

看板MATLAB作者 (基督敵)時間14年前 (2010/07/28 03:38), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串1/2 (看更多)
總之試出來的一點東西 大家如果有需要就加減看吧 如果這是簡單的東西 那我就獻醜了... ------------------------------------------------- ------------------------------------------------- 例如我們想在Y軸上標上這樣的刻度 1.0 0.9 0.8 . . . 0.1 0.0 matlab會自動修改成 1 0.9 0.8 . . . 0.1 0 這時候我們會想說哇圖畫好了就好 可是哪知道 SHIT!!! 老師說刻度小數點一定要整齊漂釀 所以我就要來想辦法 首先要介紹兩個東西 很重要 一定要先記起來 第一個要介紹的是 YTick 這個東西的作用在於決定Y軸的刻度數目 因為基本上Y軸刻度的數目是matlab自己決定的 那為什麼我們要去改動他的刻度數目呢 這樣才能知道等一下我們自己生成的刻度要幾個 也就是說我們要清洗掉matlab在Y軸上的刻度 用string的格式貼到Y軸上 第二個就是YTickLabel 樓上是決定刻度數目 這個則是決定刻度內容 例如我們直接生成一個['0.0'; '0.1'; ...; '0.9'; '1.0'] 的字串 貼到Y軸上 這裡可以試試看如果不先決定刻度數目 而直接貼上刻度內容會變怎樣 eg: x=1:100; y=(sin(x)+1)/2; %y的範圍在0~1之間 plot(x,y); set(gca,'YTickLabel',['0.00'; '0.25'; '0.50'; '0.75'; '1.00']) 結果就是你在matlab圖上看到的那樣 但如果改成我先決定Y軸上有幾個刻度 (上例是5個) eg: x=1:100; y=(sin(x)+1)/2; plot(x,y); set(gca,'YTick' , linspace(0,1,5)) set(gca,'YTickLabel',['0.00'; '0.25'; '0.50'; '0.75'; '1.00']) ------------------------------------------------------------------ solution 1: 一開始參考網路上的做法 超麻煩簡直是在開玩笑 先寫檔再讀檔 以上面的例子為例 以下不再說明 直接貼程式碼了 假如我們需要10個刻度 x=1:100 y=(sin(x)+1)/2; plot(x,y); label = linspace(0,1,10); f = fopen('test.txt', 'wt'); fprintf(f, '%0.2f\n', label ) fclose(f); %讀取時不是用fscanf 原因不多說了 如果可以試得出來也告訴我吧 f = textread('test.txt','%s'); set(gca,'YTick' , label); set(gca,'YTickLabel',f); -------------------------------------------------------------------- solution 2: 媽媽樂 原來num2str也可以用 '%0.2f'這招 SHIT 書上沒寫啊 一開始如果直接看matlab的help就好了 唉 虛功 x=1:100 y=(sin(x)+1)/2; plot(x,y); label = linspace(0,1,10); set(gca,'YTick' , label) set(gca,'YTickLabel',num2str(label' , '%0.2f')) ----------------------------------------------------------------------- -- "帥哥~~~來喔!!" "\⊙▽⊙/ 來啊來啊" "帥哥~~~抹呷啥??? "(  ̄ c ̄)y▂ξ 老闆娘 妳只想要我的錢 而不是我的身體" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.94.123

07/28 16:54, , 1F
最後生字串的地方我推薦sprintf 是個萬能字串generator
07/28 16:54, 1F

08/02 17:34, , 2F
推阿
08/02 17:34, 2F

01/04 17:29, , 3F
推!
01/04 17:29, 3F
文章代碼(AID): #1CJpN39g (MATLAB)
文章代碼(AID): #1CJpN39g (MATLAB)