【问题标题】:Matlab, graph two data series in one graphMatlab,在一张图中绘制两个数据系列
【发布时间】:2011-03-15 15:24:27
【问题描述】:

在 MATLAB 中,是否可以创建两个相关数据源的单个图表,第一个源绘制在 x 轴底部,第二个源绘制在 x 轴顶部向下?

我在 MATLAB 文档中找不到执行此操作的任何地方。

我需要的最终图表是这样的:

【问题讨论】:

    标签: matlab plot graph bar-chart stacked-chart


    【解决方案1】:

    我试图尽可能接近地重现您的图表。这是我最终得到的结果:

    t = linspace(datenum('01-19-2002'), datenum('06-27-2002'), 12);
    x1 = randi(40, [12 1]);
    x2 = randi(40, [12 1]);
    z = 100-x1-x2;
    
    hAxR = axes();
    hAxL = axes();
    
    h = bar(t, [x1 z x2], 'stacked');
    
    set(h(1),'facecolor','y')
    set(h(2),'facecolor',[.8 .8 .8])
    set(h(3),'facecolor','r')
    legend(h, {'s1' 's2' 's3'}, ...
       'orientation','horizontal', 'location','northoutside')
    
    set(hAxL, 'xtick',t, 'xlim',[datenum('01-01-2002') datenum('07-15-2002')])
    datetick(hAxL, 'x',2,'keepticks','keeplimits')
    xticklabel_rotate
    
    ylabel(hAxL, 'label1')
    ylabel(hAxR, 'label2')
    
    set(hAxR, 'position',get(hAxL,'position'), 'color','none', 'xtick',[], ...
        'ydir','reverse', 'yaxislocation','right', 'ylim',get(hAxL,'ylim'))
    set(hAxL, 'YGrid','on')
    

    我正在使用XTICKLABEL_ROTATE 在 x 轴上旋转标签

    【讨论】:

    • 啊!比我快5分钟!请注意,使用mathworks.com/matlabcentral/fileexchange/…,您可以获得条形的交叉阴影填充。此外,您可能想用真实的东西替换label1label2。 +1 其他完美解决方案。
    • @Jonas:谢谢,我只是在 FEX 上查找作为颜色的阴影图案的提交
    • 我刚刚注意到您只绘制了一个条形系列。鉴于问题的标题,我认为 OP 想要一个具有两种颜色的堆叠条形系列和一个带有交叉影线图案的条形系列。因此,您需要运行 hBL=bar(hAxL,data1);hBR=bar(hAxR,data2)
    • @Jonas:问题是,如果您查看原始图中的图例,您会看到三个独立的数据系列。所以在上面的示例图中,我只是生成了数据,以便中间一个在中间填充以使总和为 100。我想 OP 应该描述数据的实际外观(这只是试图在视觉上复制绘图 [除了标签,我也是懒得打字了!])
    • 太棒了。供参考。我的示例图是我使用 Google 找到的图像,这不是我的数据。我只是想找到一些接近我需要的东西,因为我的问题很难用其他方式解释。我没想到有人会如此彻底地复制这个例子。如果我能两次投票给这个答案就好了。 :)
    【解决方案2】:

    查看bar 函数的文档。您可以使用它来创建如下图:

    【讨论】:

    • 为什么是-1?这不是一个完整的解决方案,但它应该让 OP 走上正轨。
    猜你喜欢
    • 2016-07-22
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多