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

看板MATLAB作者 (apple)時間12年前 (2012/04/28 11:37), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
請問這樣固定有效位數的方法,能否運用在等高線上呢? ------------------以下為程式碼--------------------- X,Time,NE都是500x61的矩陣 cmat=contour(X,Time,NE,[16.7526,17.6026,18.0276,19.5151]); clabel(cmat,[16.7526,17.6026,18.0276,19.5151]); --------------------------------------------------- 畫在圖上後,等高線值都只顯示到個位數,小數點以後都看不到 有什麼辦法可以解決呢?用科學記號或固定小數位數都可以 要怎麼改clabel上的格式呢? 謝謝 ※ 引述《honoYang (基督敵)》之銘言: : 總之試出來的一點東西 : 大家如果有需要就加減看吧 : 如果這是簡單的東西 : 那我就獻醜了... : ------------------------------------------------- : ------------------------------------------------- : 例如我們想在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')) : ----------------------------------------------------------------------- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.25.107
文章代碼(AID): #1FcsNxU2 (MATLAB)
文章代碼(AID): #1FcsNxU2 (MATLAB)