【问题标题】:Legend on scatter3 in MatlabMatlab中scatter3上的图例
【发布时间】:2016-05-17 22:09:16
【问题描述】:

我期待它能够工作,但我错过了 MATLAB 帮助文件中的“句柄向量”。

LEGEND(M),其中 M 是字符串矩阵或字符串元胞数组,并且

LEGEND(H,M) 其中 H 是线和补丁的句柄向量 有效。

myone = ones(20,1);
mytwo = ones(20,1)+1;
rows = vertcat(myone,mytwo);
mylabels = {'Alpha', 'Beta'};

figure
grouplabels = mylabels(rows);
h = scatter3(rand(40,1),rand(40,1),rand(40,1),20,rows,'filled'), ...
    view(-33,22)
legend(handle(h),grouplabels)

xlabel('X')
ylabel('Y')
zlabel('Z')

【问题讨论】:

  • h 本身是 handle,但不是向量,而是单个标量散布系列对象的句柄。无论如何,请参阅this post
  • 不幸的是,这是 MATLAB 散点图中的一个已知错误,需要下载补丁(或等到更新版本)。 mathworks.com/support/bugreports/1283854
  • Mathworks 建议 gscatter() 也是一个选项,并且似乎与 legend() 一起正常工作
  • @gariepy,这个错误无关紧要。它只影响 2015b,不影响其他版本。在这种特殊情况下,问题显然是不同的,并且可以在所有其他 Matlab 版本上重现。
  • @gariepy 你能用 gscatter 制作一个 3D 图吗?我试过了,但我搞砸了 2D 上的投影 3D 空间。

标签: matlab matlab-figure


【解决方案1】:

您的代码的问题是hscatter3 的输出,是一个单句柄。它不是一个与数据大小相同的句柄数组(这是您尝试在其上设置 40x1 标签数组时所暗示的,忽略不相关的 handle 包装器)。它甚至不是人们想象的两个手柄的数组(每种颜色一个)。所以你不能像这样设置图例。一种解决方法是一次绘制一种颜色的所有点:

hFig = figure();
axh = axes('Parent', hFig);
hold(axh, 'all');
h1 = scatter3(rand(20,1),rand(20,1),rand(20,1),20,'b','filled');
h2 = scatter3(rand(20,1),rand(20,1),rand(20,1),20,'r','filled');
view(axh, -33, 22);
grid(axh, 'on');
legend(axh, [h1,h2], {'Alpha', 'Beta'});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多