【问题标题】:Using separate BaseValues / BaseLines for MATLAB bar and barh plots?对 MATLAB 条形图和条形图使用单独的 BaseValues / BaseLines?
【发布时间】:2015-07-31 20:17:53
【问题描述】:

是否可以在同一轴上绘制多个 barbarh,并为每个轴使用不同的 BaseValue

当我尝试设置第二个条形图的BaseValue 属性时,它也会更改第一个条形图的BaseValue!请参阅下面的示例。

使用多个轴的解决方案是here,但可以在不创建附加轴的情况下完成吗?具体来说,我想将BaseValue 与我正在绘制的其他数据相关联,因此覆盖另一个轴是不切实际的,因为我不能(或者我不知道如何?)参考坐标原来的轴。

subplot(1,3,1); 
bar(1:10,'BaseValue',5,'FaceColor','b');
hold on; plot([0 11],[5 5],'k-','LineWidth',2); 
         plot([0 11],[15 15],'k-','LineWidth',2); axis([0 11 0 21]);

subplot(1,3,2); 
bar(11:20,'BaseValue',15,'FaceColor','r');
hold on; plot([0 11],[5 5],'k-','LineWidth',2); 
         plot([0 11],[15 15],'k-','LineWidth',2); axis([0 11 0 21]);

subplot(1,3,3); 
bar(1:10,'BaseValue',5,'FaceColor','b'); hold on;
bar(11:20,'BaseValue',15,'FaceColor','r');
    plot([0 11],[5 5],'k-','LineWidth',2); 
    plot([0 11],[15 15],'k-','LineWidth',2);axis([0 11 0 21]);

【问题讨论】:

  • 这似乎是在最近的 matlab 更新中出现的变化,因为它在 2013a 中按预期执行,但在 R2014b 中给出了“损坏”行为。该行为似乎是半有意的,因为每个 Bar 对象都有一个 BaseLine 属性,该属性是只读的,并且似乎总是在给定轴中的所有条形图对象之间匹配。

标签: matlab plot


【解决方案1】:

这似乎是最近一次 matlab 更新中出现的变化,因为它在 2013a 中按预期执行,但在 2014b 中没有。这可能是由于切换到 HG2 图形,并且似乎是准故意的。 bar(...) 返回的 Bar 对象有一个只读的 BaseLine 属性。您可以调整Baseline 对象的属性,甚至可以复制它们,但似乎每个轴只有一个(例如axes 对象属性YBaseline)。

要在新版本中解决此问题,您可以使用 'hist' 样式标志,这会导致 bar() 创建补丁对象而不是条形图对象:

h(1) = bar(1:10, 'hist', 'b', 'BaseValue',5); hold on;
h(2) = bar(11:20,'hist', 'r', 'BaseValue',15);

由于生成的对象不是Bar 对象,它们不受父坐标区的YBaseline 属性的影响,但您也不能像使用Bar 对象那样以标准方式更改属性。

(这是 Matlab R2014b 中的状态;我不确定 R2015a 可能带来了什么变化……)

【讨论】:

  • 我刚刚更新到 MATLAB R2015b,这个解决方案不再有效!似乎使用 hist 样式现在忽略了 BaseValue 规范... arrrgh...
  • 即使只是一个电话bar(1:10, 'hist', 'b', 'BaseValue', 5); 也不能适当地调整BaseValue
  • 对不起,我无能为力;我们的软件发行版停留在 2014b。如果您还没有这样做,请尝试向 mathworks 提交错误报告。
  • 附言。我之前所做的是通读bar.m 并发现它列出了一些选项,可以为您提供传统风格的情节(patch 对象而不是Bar 对象)。你可以仔细看看是否仍然如此。
猜你喜欢
  • 1970-01-01
  • 2016-02-25
  • 1970-01-01
  • 2021-06-27
  • 2022-10-08
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多