Вопрос по plot, matlab, 3d – Ищем вариант водопада в матлаб

4

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

<code>  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)
</code>

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

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

Вы пробовали plot3? Rasman
проблема использования plot3 заключается в том, что 1) для построения графика используются линии, а не участок с поверхностью 2) plot3 (x, y, z) требует одинакового размера для x и y, но в моем случае они не одинаковы. user1285419

Ваш Ответ

2   ответа
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,:) для дна.

В любом случае большое спасибо :) user1285419
Спасибо, Расман. Работает отлично. Просто любопытно, есть ли способ сделать регион под нулевым уровнем прозрачности? Спасибо, в любом случае. user1285419
Вы можете изменить FaceAlpha, чтобы оценить меньше 1 (set (h, 'FaceAlpha', 0.3)), но это будет стоить вам всей границы цветовой схемы. Я уверен, что есть другой способ компенсировать это, я просто не понял это
1

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

figure;
[X,Y,Z] = peaks(10);
handle_figure = waterfall( X, Y, Z );
set( handle_figure, 'FaceColor', 'none' );

Похожие вопросы