2013-09-19 4 views
3

Я использую функцию contourf создать контур участка:Есть ли способ разместить линии сетки поверх контурного графика?

enter image description here

Я хотел бы получить линии сетки, чтобы появиться на верхней плоскости, которая показывает контуры.

я наткнулся на одно решение, но оно работает только в 2D (т.е. при просмотре контурный график в 2D), которые участвуют следующие две команды:

grid on 
set(gca,'layer','top'); 

Однако, линии сетки не отображаются при просмотре осей в 3D. Есть ли способ сделать это просто?

ответ

3

Вы можете выполнить это с помощью обработки объектов line, которая переписывает линии сетки или небольшой инструмент FEX под названием gridxy. Например, позволяет воссоздать фигуру, которая имеет те же свойства:

figure 
set(gcf,'Renderer','OpenGL') 

%# plot surface and contour 
Z = peaks; 
surf(Z), hold on 
[~,h] = contourf(Z);  %# get handle to contourgroup object 

%# change the ZData property of the inner patches 
hh = get(h,'Children'); %# get handles to patch objects 
for i=1:numel(hh) 
    zdata = ones(size(get(hh(i),'XData'))); 
    set(hh(i), 'ZData',-10*zdata) 
end 

И добавить дополнительные линии сетки:

v = get(gca); 
hg=gridxy(get(gca,'XTick'),get(gca,'YTick'), 'Color',[1,1,1]*0.25,'Linestyle',':'); 
set(hg,'Zdata',repmat(v.ZLim(1)+eps,[1 numel(get(hg,'Ydata'))])); 

enter image description here


Однако, есть причина не использовать surfc? Например:

Z = peaks(20); 
surfc(Z); 
view(-45, 20); 

enter image description here

+0

Эй Натана, ваш пример отлично и работает отлично. Однако, когда я использую тот же код, который вы предоставили, но с другим набором данных, контурный график выходит из строя (когда вы поворачиваете график, меняются контуры и цвета, а линии сетки появляются/исчезают). Все, что я сделал, это использовать другую матрицу для Z: http://pastebin.com/2eXaWriC (ваш код + данные для Z). Я попытался принять абсолютное значение, чтобы увидеть, были ли отрицательные числа причиной, а также установить Z = Z (1: 5,1: 5), чтобы увидеть, поможет ли квадрат матрицы, но я не могу точно определить проблему , – kyphos

+0

в моем примере нижнее значение 'ZLim' совпадает с положением в Z контура (то есть:' -10 * zdata'). Это не всегда так, вы можете обобщить и заставить меньшее значение ZLim быть точно таким же, как '-10 * zdata' или, если хотите, чтобы этот контур был. Я просто продемонстрировал пример этого. Что касается видимости линий, если вы увеличиваете масштаб изображения, вы должны видеть их в порядке, это, вероятно, проблема с отображением матрицы. Попробуйте другой рендер (zbuffer или OpenGL) и посмотрите, помогает ли он. – bla

+0

OpenGL сделал трюк. Спасибо, тонну! – kyphos

Смежные вопросы