2012-07-27 17 views
1

我仍然無法在matlab中創建可用的東西。從文本文件中創建圖表,其中軸X是具有毫秒精度的日期,Y是具有標記的值

這個任務很簡單。我有兩個文件:devideHistory.logdeals.log在這兩個文件中只考慮前兩列。所以第一個文件包含應該形成圖形的X和Y.第二個文件包含應顯示在圖形上的標記的X和Y.有了這個社會這樣的程序的幫助下創建

clear 

fDevide = fopen('devideHistory.log'); 
data = textscan(fDevide, '%f:%f:%f:%f %f,%f %f,%f'); 
fclose(fDevide); 

% hh:min:sec:millisec 
secvec = [60*60 60 1 1e-3]; 
x = [data{1:4}] * secvec'; 

flvec = [1 1e-16]; 
y = [data{5:6}] * flvec'; 

xindays = x/(24*60*60); 

plot(xindays, y); 
% set(gca, 'YTickLabel', get(gca,'YTick')) 
% datetick('x', 'HH:MM:SS'); 

hold on 

fDeals = fopen('deals.log'); 
data = textscan(fDeals, '%f:%f:%f:%f %f,%f %f,%f %f,%f %f'); 
fclose(fDeals); 

% hh:min:sec:millisec 
secvec = [60*60 60 1 1e-3]; 
x = [data{1:4}] * secvec'; 

flvec = [1 1e-16]; 
y = [data{5:6}] * flvec'; 

xindays = x/(24*60*60); 

plot(xindays, y, 'go','MarkerSize',6,'LineWidth',3); 

% i need to set enough precision on Y but this doesn't work because 
% while zooming labels doesn't update 
set(gca, 'YTickLabel', get(gca,'YTick')) 

% i want to have "time" on X but this doesn't work because 
% while zooming new labels doesn't appear 
datetick('x', 'HH:MM:SS'); 

結果: graphic

但我有兩個問題與縮放功能:

那麼我的任務是非常簡單和直接。 matlab中有簡單而直接的解決方案嗎?上面的代碼已經包含了幾個「黑客」,但仍然無法按預期工作。我害怕挫敗黑客沒有意義。有人會提出另一種方法嗎?可能matlab只是不適合我的需求?

+0

您的標記顯示正確,標籤錯誤,直接得到您的事實!您對自定義標籤有更新問題;修復與回調或甚至更簡單與[ticklabelformat](http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat)這一切都爲你 – 2012-07-27 12:53:44

回答

1
  1. 下載http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat
  2. 刪除自己的蜱標籤調用,這些的:

    set(gca, 'YTickLabel', get(gca,'YTick')) 
    datetick('x', 'HH:MM:SS'); 
    
  3. ticklabelformat(gca,'y','%g') 
    ticklabelformat(gca,'x',{@tick2datestr,'x','HH:MM:SS'}) 
    
  4. 替換他們使包含新的輔助函數tick2datestr.m

    function tick2datestr(hProp,eventData,axName,dateformat) %#ok<INUSL> 
        hAxes = eventData.AffectedObject; 
        tickValues = get(hAxes,[axName 'Tick']); 
        tickLabels = arrayfun(@(x)datestr(x,dateformat),tickValues,'UniformOutput',false); 
        set(hAxes,[axName 'TickLabel'],tickLabels); 
    end 
    

最這個輔助功能是BTW複製直出ticklabelformat的。



是的,你可以認爲這是黑客攻擊,但只要TheMathworks沒有實現你想要的「簡單」的解決方案,你必須創建自己的功能。

+0

我應該在哪裏下載文件?如何將它與我的腳本鏈接? – javapowered 2012-07-27 13:32:26

+0

我試過多次下載此文件,但仍無法收到「完整」版本。文件被剪切。文件只包含106行,最後一行是「set(hAxes,[axName'TickLabel',tickLabels)」)。我會嘗試谷歌它在另一個託管馬上可能是錯誤的mathworks – javapowered 2012-07-27 13:43:39

+0

在這裏它是可見的純文本:http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-的軸蜱標籤/內容/ ticklabelformat。m – 2012-07-27 13:51:29

相關問題