2014-09-24 83 views
0

對於一個情節,就像附加的那樣,是否有引入雙重類別軸的方法?一個(畫得不好的)例子也可以看作附加。Matlab - 雙類別X軸(日和小時)

理想應該自動生成的,所以設置靜態天名稱不理想的報告..

編輯:我還應該提到這將是巨大的,有小時重新開始每一天,0-24,0 -24,0-24等

Example data

Ideal Result

回答

2

不能確定的日子,但我有一個小時的建議。想象一下以下內容:

hours = 0:70; 
data=rand(size(hours)); 
plot(hours,data,'*') 
xlabel('Hours of day') 

這給出了以下情節:

enter image description here

現在你需要編輯由X軸使用的標籤。這裏有一種方法可以做到這一點(不一定是最優雅的,因爲你正在處理單元陣列,並且必須在字符串和數字數據類型之間來回轉換,但似乎至少在Octave中起作用):

temp = get(gca,'xticklabel'); 
for k=1:length(temp) 
    temp{k} = num2str(mod(str2num(temp{k}),24)); 
end 
set(gca,'xticklabel',temp) 

這樣做具有以下圖表:

enter image description here

祝添加下列的日子! (可能以巧妙的方式使用text命令)

+0

尼斯的答案!我添加了我的,因爲你的剛發佈:) +1 – 2014-09-24 15:22:41

2

這是一種使用文本註釋的非常自定義的方式。您可能需要添加一些較小的更改以適合您的數據。

clc 
clear 

x = 1:80; 

HourValues = repmat([0 10 20],1,3); 
DaysString = {'Mon' 'Tue' 'Wed'}; 

NumDays = numel(DaysString); 

plot(x,rand(1,80)) 

set(gca,'XTickLabel',HourValues) % Set xtick labels 

xlimit = get(gca,'XLim'); % Get x and y- limits 
ylimit = get(gca,'YLim'); 



% May need some adaptation to fit your data 
for k = 1:NumDays  
    text((NumDays*k-2)*10,ylimit(1)-.06,DaysString{k},'FontSize',14,'HorizontalAlignment','Center') 
end 

text(xlimit(2)/2,ylimit(1)-0.1,'Hour of day','FontSize',16,'HorizontalAlignment','Center') 

給予這樣的事情:

enter image description here