【问题标题】:plotting two yaxis with different markers and colors用不同的标记和颜色绘制两个 yaxis
【发布时间】:2013-08-09 21:00:49
【问题描述】:

如果我有两个 y 向量和一个 x 向量:

y1 = [0.1,0.2,0.5,0.6];
y2 = [0.3,0.4,0.7,0.8];
x = 1:length(y1);

如何使用不同的标记和不同的颜色在同一个绘图上绘制所有信息。我尝试了以下方法:

cols = {'k','r','b',[0,0.5,0]};
markers = {'s','o','d','v'};

for i = 1:4;
    plot(x(i),y1(i),markers{i},'color',cols{i},'MarkerEdgeColor',...
        cols{i},'MarkerFaceColor','w');
    hold on
end
ax1 = gca;
ax2 = axes('Position',get(ax1,'Position'),...
       'YAxisLocation','right','XColor','k','YColor','k');
linkaxes([ax1,ax2],'x'); 
for i = 1:4;
    plot(x(i),y2(i),markers{i},'color',cols{i},'MarkerEdgeColor',...
        cols{i},'MarkerFaceColor',cols{i},'Parent',ax2);
    hold on;  
end

但这似乎覆盖了第一个情节。我的目标是用定义的标记和颜色绘制前四个点(y1),但制造商的脸是白色的。然后我希望在同一个图中包含第二个 y 轴(在右侧),其中的值来自 y2,但这次标记面根据“cols”着色。我怎样才能做到这一点?

加法:

当我使用 plotyy 时

for i = 1:4;
    [ax,h1,h2] = plotyy(x(i),y1(i),x(i),y2(i));
    hold on
    set(h1,'linestyle','none','marker',markers{i},'MarkerEdgeColor',...
        cols{i},'MarkerFaceColor',cols{i});
    set(h2,'linestyle','none','marker',markers{i},'MarkerEdgeColor',...
        cols{i},'MarkerFaceColor','w');
    set(ax,{'ycolor'},{'k';'k'},{'xcolor'},{'k';'k'});
end

xaxis 值显示不正确,虽然它们是相同的,但它们并没有在图上对齐。

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    可以使用matlab的内嵌函数plotyy

    plotyy(X1,Y1,X2,Y2) 绘制 X1 与 Y1 的图,左侧带有 y 轴标签,并绘制 X2 与 Y2 的图,右侧带有 y 轴标签。

    查看更多选项here

    此示例使用 plot 作为绘图函数绘制两个数学函数。两个 y 轴使您可以在一个图表上显示两组数据,即使数据的相对值完全不同。

    figure
    x = 0:0.01:20;
    y1 = 200*exp(-0.05*x).*sin(x);
    y2 = 0.8*exp(-0.5*x).*sin(10*x);
    [AX,H1,H2] = plotyy(x,y1,x,y2,'plot');
    

    如果您尝试使用“按住”,这可以解决异步轴:

    set(ax, 'XLim', [min(xaxis) max(xaxis)]);
    set(ax(2),'XTick',[]);
    

    【讨论】:

    • 如果您在循环中生成情节,即在进行过程中构建情节,plotyy 是否有效,类似于我上面显示的内容?
    • 当然可以。只是把'保持'离子之间。并手动处理标签。
    【解决方案2】:

    问题是叠加图上的背景颜色设置为白色(并且不透明度设置为最大),因此下面的所有内容都是不可见的。用

    替换 ax2 = ... 语句
    ax2 = axes('Position',get(ax1,'Position'),...
    'YAxisLocation','right','XColor','k','YColor','k','color','none');
    

    应该解决问题。

    【讨论】:

      猜你喜欢
      • 2021-07-18
      • 2015-08-30
      • 2017-05-23
      • 1970-01-01
      • 2013-05-05
      • 2012-07-26
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多