覆盖的matlab图有两个不同的y轴刻度

时间:2014-03-28 11:43:28

标签: matlab plot label

我试图让MatLab生成一个具有两个不同比例的y轴的图。我到目前为止的代码是:

    function [h]=YieldvspH1(a)

data1=importdata(a);

data=data1.data;
text=data1.textdata;

yield=data(:,1);
pH=data(:,2);

for i=1:length(pH)
    dates(i,:)=[str2num(text{i,1}(1:2)),str2num(text{i,1}(4:5)),str2num(text{i,1}(7:8))];
    dates2(i,:)=text{i,1};
end

h=figure;

hold on
set(gcf,'PaperPositionMode','auto');

plot1=plot(pH,'linewidth',1.5);
plot2=plot(yield,'m','linewidth',1.5)

h_ax=gca;
h_ax_line=axes('position', get(h_ax, 'position')); % Create a new axes in the same position as the first one, overlaid on top
set(h_ax_line, 'YAxisLocation', 'right'); % Put the new axes' y labels on the right
ylabel(h_ax, 'pH');
ylabel(h_ax_line, 'Yields');
set(gca, 'XTick',1:length(dates), 'XTickLabel',dates2(1:pointsperday:length(dates(:,1)),:),'xlim',[0 length(dates)]);
xlabel('Time');

holdoff

然而,这会产生一个空图,没有数据和不正确的比例。我作为变量a读入的数据是具有以下结构的csv文件:

17/01 / 2014,40.2,5.9

18/01 / 2014,38.6,6.2

(每天一行,约40天)

日期字段以textdata格式读入,然后转换为数字。第二个字段以' yield'第三个是作为pH读入。因此,目标是在左侧y轴上具有pH值,在右侧y轴上具有屈服值,其中日期沿着x轴。我对Matlab没有太多经验,所以请原谅任何明显的错误!

任何提示都将不胜感激!

编辑:好的,感谢nkjt的回答,我现在有了这个功能:

function [h] = YieldvspH1(a)

data1 = importdata(a);

data = data1.data;
text = data1.textdata;

yield = data(:,1);
pH = data(:,2);

h=figure

dates = datenum(2014,1,18):1:datenum(2014,2,28);

[ax, h1, h2] = plotyy(dates,yield,dates,pH);

for n = 1:2
  datetick(ax(n),'x','dd/mm');
end

麻烦是matlab期望datetick函数的第一个参数是' x',' y'或者' z'。我试过单独转换两个轴而不使用循环,但我仍然最终得到一个dd / mm格式和另一个奇怪的格式(数字像7E5)。我怎么能纠正这个?

干杯

1 个答案:

答案 0 :(得分:2)

当您定义第二个轴时,您的绘图显示为空白的原因是"轴"不仅仅有外部标签,而且还有一个内部绘图空间 - 就像在你已经绘制过的顶部放置一个额外的空白图。如果您真的想尝试手动执行此操作,可以通过使用'Color','none'创建新轴来解决此问题。

但是,正如评论中所述,您可以使用plotyy代替。我会将其与datetick结合使用,以便更轻松地绘制时间。

首先,使用datenum

定义x轴值
dates = datenum(2014,1,17):1:datenum(2014,2,25);

如果您在单元格中将它们作为一组字符串使用,则还可以使用datenum进行转换,并为其指定格式'dd/mm/yyyy'

dates = datenum(text{:,1}, 'dd/mm/yyyy');

其次,将那些datenum值作为我们的x轴值:

[ax, h1, h2] =plotyy(dates,yield,dates,pH);

使用h1绘图后,您可以使用h2set作为手柄来调整线宽等。

ax包含两个句柄,每个轴由plotyy生成一个句柄。我们可以使用这些来使用datetick设置x轴的格式。两个轴必须设置为相同的值,否则你会得到奇怪的重叠文本,似乎datetick一次只处理一个轴,因此循环:

for n = 1:2
  datetick(ax(n),'x','dd-mmm');
end

datetick接受多种格式。如果您想调整刻度线的确切位置,请先通过set更改它们(记住将ax(1)和ax(2)设置为相同的值),然后用datetick调用它们选项'keepticks','keeplimits'