Matlab - 双类X轴(日和小时)

时间:2014-09-24 14:38:23

标签: matlab matlab-figure axis-labels

对于一个情节,如附图所示,有没有办法引入双类别轴?也可以看到一个(绘制得很差)的例子。

理想情况下,报告应该是自动生成的,因此设置静态日期名称并不理想。

编辑:我还应该提一下,每天小时重新开始,0-24,0-24,0-24等等会很棒

Example data

Ideal Result

2 个答案:

答案 0 :(得分: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命令)

答案 1 :(得分: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