2015-11-26 132 views
2

我有一個表面圖,我已經繪製了一些點。現在我想標記每個這些點。我使用了下面的代碼。標記散點數據點

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); 

但標籤數據不清楚
enter image description here

如何才能使這些標籤清晰?


改變,因爲'Color', 'black', 'FontSize', 14) 後,仍然將標籤顯示爲

enter image description here
他們仍然不明確。

+0

'文本的示例(..., '顏色', '白', 'FontSize',14);'根據需要改變'白色'和'14'。 – IKavanagh

+0

@IKavanagh我改爲''顏色','黑色','FontSize',14'。但標籤仍然不清楚。我在帖子 –

+1

中包含了新的情節我認爲這兩個答案都沒有解決完整的問題:即文本與情節交織在一起。無論「背景」屬性如何,都會發生。我的建議是手動解除圖表上方的文本標籤,即在此視圖中降低'x'和'y'座標並增加'z'座標。儘管你必須事先了解你的情節,但至少你可以在你的圖表上看到文字。 – Adriaan

回答

2

爲了使文字顯示以上表面,您需要更改text自身的座標。這是稍微複雜,需要一點點的視覺確認,但它會是這個樣子:

enter image description here

當我用下面的代碼:

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); 

你將不得不目視確認文字相對於情節的位置,並相應地更改dx,dydz。但請注意,當你旋轉的情節文字可能會落後於表面。

其他答案中提到的文本屬性(如backgroundFontWeight)除了這種將文本置於前面的方式外,還可以幫助您使文本在圖形上可讀。

3

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

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

enter image description here

+0

我已經完成了'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')'但點仍顯示爲http://snag.gy/klWNR.jpg如果我刪除曲面圖,則標籤顯示正確。 –

4

確定現在我明白了: 使用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') 

enter image description here

enter image description here

+0

這似乎是我的手動變通的通用版本,很酷!可能我建議,儘管你刪除了'close'和'clear'語句,因爲在自己的程序中複製這些代碼的人可能會遇到問題。另外:上傳的數字,因爲數字看起來不錯,讓你upvotes;) – Adriaan

+0

@ Adriaan:刪除它。我總是喜歡獨立的代碼版本,但當然清楚所有代碼中間沒有幫助;) – horseshoe

+0

很難看出每個標籤涉及哪些點。現在你有了這個白色背景,我是否可以建議每次都用一些隨機的顏色着色該標籤的字體和點的顏色? –