用 2 个 y 轴和 datetick 散布

Scatter with 2 y-axes and datetick

非常感谢您的帮助。

我必须独立数据集。每个数据集包含两个变量:日期(作为日期编号)和相应的数据。我需要将两个数据集绘制在一个散点图上,日期在 x 轴和两个 y 轴上。我一直在尝试使用以下代码:

figure(1); 
scatter(x1,y1,'g'); 
set(gca); 
ax1=gca;
set(ax1,'YColor','g'); 
ax2 = axes('Position',get(gca,'Position'),'YAxisLocation','right', XTick'[],'Color','none','YColor','r'); 
hold on; scatter(x2,y2,'r');

现在,这在右侧给出了正确的 y 轴,但是在右侧我最终得到了两个重叠的 y 轴。 此外,我需要更改 x 轴,以便它显示日期而不是日期数字。我试图将 datetick 合并到代码中,但它再次给了我两个重叠的 x 轴。

有人知道怎么做吗?

谢谢

我用您的示例输入尝试了您的脚本,没有发现任何问题。无论如何,这是一个使用 matlab 函数 plotyy 的解决方案,它适用于像这样的简单绘图:

%generate input
x1=[732490 732509 732512 732513 732521 732528];
y1=[7.828 7.609 22.422 14.758 26.258 1.477];
x2=[732402 732403 732404 732404 732433];
y2=[0.693 0.645 0.668 0.669 0.668];

figure(1); 
[ax, h1,h2]=plotyy(x1,y1,x2,y2,'scatter');

%set colors manually
green=[0 1 0];
red=[1 0 0];
set(h1,'cdata',green);
set(h2,'cdata',red);
set(ax(1),'ycolor',green);
set(ax(2),'ycolor',red);

%note the 'keepticks' and 'keeplimits' options
datetick(ax(1),'x','yyyy-mm-dd','keepticks','keeplimits');
datetick(ax(2),'x','yyyy-mm-dd','keepticks','keeplimits');

如果没有 datetick 调用,plotyy 函数会同步绘图中的 xtick。当您调用 datetick 时,它会重新计算刻度,除非您明确告诉它不要这样做,请参阅选项 keepticks,这被视为两组 x 轴(即使 x 坐标相同,刻度位于不同的位置)。需要 keeplimits 选项来保留原始 xlim。显然需要更多的手动工作才能获得足够漂亮的图。

另请注意,我手动设置了轴和数据颜色:可能有一种方法可以更优雅地完成此操作。

更新keeplimits原先缺失

Update2:更改示例数据以对应更新的问题评论