【问题标题】:Labelling scatter data points标记散点数据点
【发布时间】:2016-02-29 09:49:35
【问题描述】:

我有一个曲面图,并在上面绘制了一些点。现在我想标记这些点。我使用了以下代码。

name={'point1','point2','point3','point4','point5'}
co=[0 0 0];
scatter3(X,Y,Z,[],co,'filled');
c=cellstr(name);
dx = 0.1; dy = 0.1;
dz=0.1;
text(X+dx, Y+dy,Z+dz, c);

但是标签数据不清楚

我该怎么做才能使这些标签清晰?


改成'Color', 'black', 'FontSize', 14)后还是这样 标签显示为


还是不清楚。

【问题讨论】:

  • text(..., 'Color', 'white', 'FontSize', 14); 根据需要更改 white14
  • @IKavanagh 我改成了'Color', 'black', 'FontSize', 14。但是标签仍然不清楚。我在帖子中包含了新情节
  • 我认为这两个答案都没有解决全部问题:即文本似乎与情节交织在一起。无论background-property 是什么,这都会发生。我的建议是手动提升绘图上方的文本标签,即在此视图中降低 xy 坐标并增加 z 坐标。不过,您确实必须事先了解绘图的视图,但至少您可以在图表顶部显示文本。
  • @Adriaan 是的,我让 dz=0.2;现在它可以工作了。谢谢你。但是标签看起来有点离题了。
  • @Adriaan 谢谢。弄对了

标签: matlab scatter-plot surface


【解决方案1】:

好的,现在我明白了: 使用set(gca,'SortMethod','childorder') 我在下面添加了一个示例

    name={'<-point1','<-point2','<-point3','<-point4','<-point5'};
    co=[0 0 0];
    X  = repmat([1:10],1,10);
    Y  = sort(repmat([1:10],1,10));
    Z = X.*Y;

    X2 = repmat([1:10],10,1);
    Y2 = X2';
    Z2 = X2.*Y2;

    figure
    hold on 
    surf(X2,Y2,Z2);
    set(gca,'View',[-45 30])
    scatter3(X,Y,Z,[],co,'filled');

    c=cellstr(name);
    dx = 0.3; dy = -0.2;
    dz=0.1;
    %text(X(51:55)+dx, Y(51:55)+dy,Z(51:55)+dz, c,'BackgroundColor',[1 1 1]);
    text(X(51:55)+dx, Y(51:55)+dy,Z(51:55)+dz, c,'Color','white','Fontweight','bold');    
    scatter3(X(51:55),Y(51:55),Z(51:55),[],ones(5,3),'filled','MarkerEdgeColor','k');
    set(gca,'SortMethod','childorder')

【讨论】:

  • 这似乎是我手动解决方法的通用版本,酷!我是否可以建议您删除 closeclear 语句,因为人们在自己的程序中间复制此代码可能会遇到问题。另外:上传图,因为图看起来不错,可以让你投票;)
  • @Adriaan:删除了。我总是喜欢独立的代码版本,但当然代码中间的所有内容都没有帮助;)
  • 很难看出每个标签与哪些点相关。既然你有了这个白色背景,我是否建议每次用一些随机颜色为标签的字体和点的颜色着色?
  • @Dev-iL 对:我添加了第二个没有背景的版本
  • @horseshoe 这个其他版本看起来不错,但是如果你试图解决我提到的问题,这不是我想要的......因为仍然很难(不可能?)知道标签与哪个点相关。我的意思是也许你应该在曲面顶部创建另一个 scatter 绘图,其中点的标签颜色为白色/红色。
【解决方案2】:

为了使文本出现在表面上方,您需要更改text 本身的坐标。这有点复杂,需要一些视觉确认,但看起来像这样:

我使用以下代码的地方:

data = rand(5,3);
X=data(:,1);
Y=data(:,2);
Z=data(:,3);
figure;scatter3(X,Y,Z)
hold on
name={'point1','point2','point3','point4','point5'}
c=cellstr(name);
dx = -0.1; dy = -0.1;
dz=0.2;
text(X+dx, Y+dy,Z+dz, c);

您必须直观地确认文本相对于情节的位置,并相应地更改dxdydz。请注意,当您旋转绘图文本时,可能会隐藏在表面之后。

文本属性,例如其他答案中提到的backgroundFontWeight,除了这种将文本放在前面的方式外,还可以帮助您在图表上阅读文本。

【讨论】:

    【解决方案3】:

    使用文本命令的背景属性:

    text(0,1,'Hi the first point','background',[1 230/255 230/255]);
    

    【讨论】:

    • 我已经完成了h=text(X+dx, Y+dy,Z+dz, c,'Color', 'black', 'FontSize', 14,'background',[1 230/255 230/255],'BackgroundColor',[1 1 1],'FontWeight','bold'); uistack(h, 'top'),但点仍然显示为snag.gy/klWNR.jpg 如果我删除表面图,那么标签会正确显示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2017-05-12
    • 2022-01-13
    • 2018-11-09
    • 1970-01-01
    • 2017-12-13
    • 2016-08-05
    相关资源
    最近更新 更多