我必须构造一个带有对数y轴的半对数图。我的x轴类型是日期时间。一般来说,要实现这一点,可以使用semlogy命令。下面写的示例代码给出了我想做的事情的要点:
clear;clc;close
StartDate = datenum('12-Oct-2012 16:50:00');
EndDate = datenum('12-Oct-2012 17:50:00');
NoOfYAxisDataPoints=20;
NoOfTickMarks=5;
xAxisData = linspace(StartDate,EndDate,NoOfYAxisDataPoints);
yAxisData=linspace(1,25,NoOfYAxisDataPoints);
figure
semilogy(xAxisData,yAxisData)
xTickData = linspace(StartDate,EndDate,NoOfTickMarks);
ax = gca;
ax.XTick = xTickData;
datetick('x','HH:MM','keepticks')
这里x和y轴数据都是双类型的。但是,如果x轴数据不是双倍的,而是如图所示的日期时间类型,我该如何实现我的目标:
Year = 2012;Month = 10;Day = 12;
Hours = 16;Minutes=(50:5:110)';Seconds= 00;
Time=datetime(Year,Month,Day,Hours, Minutes, Seconds);
figure
plot(Time,linspace(1,25,13))
xTickData = linspace(datenum(Time(1)),datenum(Time(end)),NoOfTickMarks);
ax = gca;
ax.XTick = xTickData;
datetick('x','HH:MM','keepticks')
当我将绘图更改为半对数时,我会收到一条错误消息"使用半对数时出错。"行"中不支持非数字数据"。但是,Semlogy的文档指出,"Xn中的值可以是数字、日期时间、持续时间或分类值。Yn中的数值必须是数字。"。即使我的x轴值是日期时间类型,我也会收到这个错误。我做错了什么?我如何完成这项任务?
我正在使用Matlab2016a
听起来您的Matlab版本不支持datetime
作为semilogy
的x轴。至少R2019b对我来说很好。在plot
:之后,你可以很容易地更改y刻度
ax.YScale = 'log';