2016-09-06 94 views
1

我試圖繪製在MATLAB數據陣列如下:軸上標籤值

ans = [8.1, 8.1+(10^-11) , 8.1+2*(10^-11) , 8.1+3*(10^-11)] 
labels = [8.1, 8.1+(10^-11) , 8.1+2*(10^-11) , 8.1+3*(10^-11)] 
plot([1,2,3,4],ans) 

以上代碼生成這樣的: -

plot

問題是所有數據點的Y軸顯示相同的值/數量/標籤。我怎樣才能更精確地顯示這些標籤? (例如8.1,8.1+10^-11,...或8.10000000001

我嘗試了下面的命令,但它沒有幫助。

set(gca, 'YTickLabel', get(gca, 'YTick')); 

任何人都可以請幫助改善這種情節,以反映數據點之間的差異?

+1

無法用MATLAB 2016a重現您的問題。我在你的問題開始時運行了前三行,並得到了以下結果:http://i.stack.imgur.com/fxRak.jpg(雖然你指定的標籤值不是任何東西)。您正在使用哪個版本的MATLAB? –

+0

感謝您的評論。我正在使用MATLAB 2014b。 – Crimson

+0

我可以通過運行這一行來重現您的問題:'set(gca,'YTickLabel',get(gca,'YTick'));'你是否總是用這行代碼運行你的代碼?如果是,請嘗試在沒有它的情況下運行您的代碼 –

回答

1

您可以在Matlab中手動控制Y軸標籤的格式。 所以,下面的代碼將在比Matlab2015b更高的版本上工作。

res = [8.1, 8.1+(10^-11) , 8.1+2*(10^-11) , 8.1+3*(10^-11)]; 
plot([1,2,3,4],res); 
ay=gca; 
ay.YAxis.TickLabelFormat = '%.12f'; 

如果你想手動控制你的版本Y軸刻度標記標籤的格式,你應該做同樣的事情到

res = [8.1, 8.1+(10^-11) , 8.1+2*(10^-11) , 8.1+3*(10^-11)]; 
plot([1,2,3,4],res); 
ay=gca; 
currTicks=get(ay,'YTick'); 
for i=1:size(currTicks,2) 
    newTickLabels(i,1)=cellstr(sprintf('%.12f',currTicks(i))); 
end 
set(ay,'YTickLabel',newTickLabels); 

我沒有測試上Matlab2014b這個代碼,但我沒有看到它缺乏的功能(至少據我所知)。

在Matlab 2016a中,通過複製和粘貼代碼,「開箱即用」沒有問題。

+0

感謝您的回答。您爲控制Y軸刻度標籤(適用於Matlab2014b用戶)的格式提供的代碼效果很好。 – Crimson