2012-07-01 28 views
5

Tôi có một bản đồ địa hình mà tôi muốn đại diện cho một số dữ liệu trong Xem hình dưới đây:.Matlab lướt với những gam màu khác nhau

enter image description here

Khu vực bên phải bao bọc bởi màu trắng là một lướt riêng cho phần còn lại của cốt truyện. Những gì tôi muốn có thể làm là thay đổi bảng màu. Bên ngoài phải có thang màu xám và bên trong phải là một màu duy nhất dựa trên giá trị mà tôi đã tách riêng với cốt truyện. Hiện tại tôi đã thử chức năng colormap (màu xám) rồi thay đổi nhưng thay đổi toàn bộ cốt truyện.

Tôi đang mở cho các đề xuất về phong cách vẽ khác biệt tức là. plot3 thay vì lướt sóng. Vì vậy, dữ liệu tôi phải làm cho hai lần lướt này là hai danh sách các điểm x, y, z.

Nếu có thể, tôi cũng muốn hiển thị thanh màu đại diện cho màu của khu vực được khoanh tròn (sẽ được tôi đặt dựa trên giá trị bên ngoài).

Có ai biết cách tốt để làm điều này không?

Cảm ơn.

EDIT:

gì tôi muốn làm điều này là:

enter image description here

Các hình ảnh không được có màu xanh đậm ở phía trên cùng của gò. Hình ảnh sẽ liên tục cập nhật với nhiều điểm 'xanh' hơn, màu sắc sẽ thay đổi dựa trên giá trị bên ngoài và lý tưởng là nó sẽ hợp nhất màu với các điểm trước đó nếu chúng trùng nhau.

Trả lời

2

Bạn có thấy điều này từ MATLAB Tech Support không?

http://www.mathworks.com/support/solutions/en/data/1-GNRWEH/index.html

Bạn có thể chỉnh sửa colorbar tài sản.

g = colorbar; 
get(g) 

Ví dụ,

% Define a colormap that uses the cool colormap and 
% the gray colormap and assign it as the Figure's colormap. 
colormap([cool(64);gray(64)]) 


% Generate some surface data. 
[X,Y,Z] = peaks(30); 


% Produce the two surface plots. 
h(1) = surf(X,Y,Z); 
hold on 
h(2) = pcolor(X,Y,Z); 
hold off 


% Move the pcolor to Z = -10. 
% The 0*Z is in the statement below to insure that the size 
% of the ZData does not change. 
set(h(2),'ZData',-10 + 0*Z) 
set(h(2),'FaceColor','interp','EdgeColor','interp') 
view(3) 


% Scale the CData (Color Data) of each plot so that the 
% plots have contiguous, nonoverlapping values. The range 
% of each CData should be equal. Here the CDatas are mapped 
% to integer values so that they are easier to manage; 
% however, this is not necessary. 


% Initially, both CDatas are equal to Z. 
m = 64; % 64-elements is each colormap 


cmin = min(Z(:)); 
cmax = max(Z(:)); 
% CData for surface 
C1 = min(m,round((m-1)*(Z-cmin)/(cmax-cmin))+1); 
% CData for pcolor 
C2 = 64+C1; 


% Update the CDatas for each object. 
set(h(1),'CData',C1); 
set(h(2),'CData',C2); 


% Change the CLim property of axes so that it spans the 
% CDatas of both objects. 
caxis([min(C1(:)) max(C2(:))]) 

% I added these two lines 
g = colorbar 
set(g,'YLim',[1 60]) 

Hai dòng cuối cùng là của tôi. Phần còn lại là từ liên kết Hỗ trợ Kỹ thuật MATLAB. Và nó sẽ cho bạn một thanh màu chỉ với một bản đồ màu. Nếu bạn muốn một nửa màu xám của bản đồ màu, thì bạn sẽ làm set(g,'YLim',[64 128]).

enter image description here

+0

Hey bạn có thể nghĩ ra một cách để hiển thị một thanh màu cho chỉ là một phần của màn hình? –

7

Vì bạn muốn thiết lập các khu vực được khoanh tròn vào một màu duy nhất mà thôi, bạn có thể đặt nó FaceColor tài sản. Ví dụ:

%# make some test data 
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5); 
zz = exp(-xx.^2/2+-yy.^2/2); 
zz1 = zz; 
zz1(zz1>0.5)=NaN; 
zz2 = zz; 
zz2(zz2<0.5)=NaN; 

%# plot first surface, set colormap 
surf(zz1) 
colormap('gray') 

%# stretch colormap to [0 0.5] 
caxis([0 0.5]) 

%# plot the second surface in red 
hold on 
surf(zz2,'faceColor','r') 

enter image description here

EDIT

Nếu bạn muốn có colormaps khác nhau cho các bộ phận của bề mặt của bạn, bạn cần phải thiết lập các 'CData' tài sản của các bề mặt để chỉ số vào colormap .Để chỉ hiển thị một bản đồ màu duy nhất trong thanh màu, bạn có thể sử dụng thực tế rằng thanh màu chỉ đơn giản là một âm mưu khác, có nghĩa là bạn chỉ có thể hiển thị một phần của nó và thay đổi nhãn.

%# make some more test data 
[xx,yy]=ndgrid(-5:0.1:5,-5:0.1:5); 
zz = exp(-xx.^2/2+-yy.^2/2); 
zz1 = zz(1:50,:); 
zz2 = zz(52:end,:); 
xx1 = xx(1:50,:);xx2=xx(52:end,:); 
yy1 = yy(1:50,:);yy2=yy(52:end,:); 

%# create multi-colormap, set it to figure 
figure 
cmap = [gray(128);copper(128)]; 
colormap(cmap) 

%# plot surfaces, setting the cdata property to indices 1-128 and 129-256, 
%# respectively, in order to access the different halves of the colormap 
surf(xx1,yy1,zz1,'cdata',round(127*(zz1-min(zz1(:))/(max(zz1(:))-min(zz1(:)))))+1,'cdatamapping','direct') 
hold on 
surf(xx2,yy2,zz2,'cdata',round(127*(zz2-min(zz2(:))/(max(zz2(:))-min(zz2(:)))))+129,'cdatamapping','direct') 

%# find the handle to the colorbar 
%# alteratively: cbarH = findall(gcf,'tag','Colorbar') 
cbarH = colorbar; 

%# set limits and ticks/labels 
ylim(cbarH,[129 255]) 
set(cbarH,'ytick',[129 192 255],'yticklabel',[0 0.5 1]) 

enter image description here

+0

@Ben: Có vẻ như tôi có thể đã hiểu lầm câu hỏi của bạn - dường như bạn muốn có các bản đồ màu khác nhau cho các phần khác nhau của bề mặt. Tôi đã thêm một ví dụ về cách làm điều đó. – Jonas

+0

Cảm ơn vì điều đó, Vấn đề tôi đang cố gắng giải quyết đã trở nên phức tạp hơn một chút. Tôi muốn có một bảng màu (ví dụ: màu xám) cho phần lớn bản đồ, nhưng phần giữa phải là một màu duy nhất tôi có kế hoạch tiếp tục thêm các loại lướt này với các màu khác nhau. Có ý tưởng nào về việc đó không? (Màu sắc đại diện cho một tập hợp dữ liệu khác nhau, tôi đang cố gắng ánh xạ dữ liệu này trên bề mặt 3d bằng cách biểu thị nó với một dải màu, dữ liệu này sẽ nằm trong khoảng từ 0 đến 3 và có phần liên tục). –

+0

@Ben: Tôi không chắc chắn tôi theo dõi. Ý bạn là "phần giữa"? Đó có phải là một phần khác của bề mặt không? Bạn có muốn có một ban nhạc đi xung quanh ở độ cao cố định không? Bạn có ý nghĩa gì với màu đơn? Chỉ có màu đỏ, hoặc màu xanh lá cây hoặc một bản đồ màu đen -> xanh lục thay vì màu đen-> màu trắng? Sẽ rất hữu ích nếu bạn có thể làm ví dụ cho photoshop. – Jonas

Các vấn đề liên quan