2012-05-07 2 views
4

У меня есть 3-мерные данные, которые будут отображаться в Matlab. Набор данных построены штабелированиями 10 экспоненциальных кривых с различными параметрами по направлениям у таких какИщете вариант участка водопада в Matlab

x = 0:0.01:15; 
    x0 = 0.5; 
    y = [beta1, beta2, beta3, beta4, beta5, beta6, beta7, beta8, beta9, beta10]; 
    Z(1, :) = A*exp(-(x-x0).^2/beta1); 
    Z(2, :) = A*exp(-(x-x0).^2/beta2); 
    Z(3, :) = A*exp(-(x-x0).^2/beta3); 
    Z(4, :) = A*exp(-(x-x0).^2/beta4); 
    ... 
    Z(10, :) = A*exp(-(x-x0).^2/beta10); 
    % here A could be change based on beta too (no code shown here) 

Я пытаюсь построить Z с водопадом, за исключением я не хочу высоты (то есть вертикальная линия) появляется на край. Я не знаю, есть ли какой-либо другой способ построения данных в виде водопадных кривых, но без этих вертикальных линий. Благодаря

how to get rid the vertical lines as circled in the following figures

+0

вы пробовали plot3? – Rasman

+0

проблема использования plot3: 1) она построена с линиями вместо патча с поверхностью 2) plot3 (x, y, z) требует того же размера среди x и y, но в моем случае они не совпадают. – user1285419

ответ

2

«она построена с линиями вместо пластыря с поверхностью».
Другими словами, вы хотите, чтобы граничные линии были невидимыми. Ну, это не тривиальный подвиг, так как граничные линии отделены от любой цветовой схемы, которую вы можете напрямую включить. Что вам нужно сделать, так это получить данные после их намотки, затем изменить его соответствующим образом:

например.

[X,Y,Z] = peaks(30); 
h = waterfall (X,Y,Z); 
CD = get (h, 'CData'); 
CD(1,:) = nan; 
CD(end-2:end,:) = nan; 
set (h, 'CData', CD) 

отмечает, что CD(1,:) является для «восходящей» границы, в то время как CD(end-2:end-1,:) для падающей границы, и CD(end,:) для нижнего.

+1

Спасибо Расман. Он отлично работает. Просто любопытно, что любой способ сделать регион ниже нуля прозрачным? Спасибо, в любом случае. – user1285419

+1

вы можете изменить FaceAlpha на значение меньше 1 ('set (h, 'FaceAlpha', 0.3)'), но это будет стоить вам всей цветовой гаммы границ. Я уверен, что есть еще один способ компенсировать это, я просто не понял это – Rasman

+0

Спасибо вам, так или иначе :) – user1285419

1

я знаю, что это старый пост, но ниже, область под кривой прозрачным:

figure; 
[X,Y,Z] = peaks(10); 
handle_figure = waterfall(X, Y, Z); 
set(handle_figure, 'FaceColor', 'none'); 
Смежные вопросы