Matlab: `me sh ()` заговор с меньшим количеством сетки - PullRequest
3 голосов
/ 21 января 2020

Скажем, data - это матрица размером 129 * 129.

, используя

mesh(data, 'FaceColor', 'none', 'EdgeColor', 'black')

, мы получаем что-то вроде

enter image description here

Мы можем обнаружить, что сетка довольно интенсивна . Я хотел бы иметь ту же цифру, но с меньшим количеством меня sh линий , что-то вроде

enter image description here


Конечно, можно построить меньший data, например data(1:10:end, 1:10:end). Но в этом случае сюжет уже не точен, как раньше.

Другой пример - plot(..., 'MarkerIndices', ...). Это может дать вам график с меньшим количеством маркеров без изменения графика. https://www.mathworks.com/help/matlab/creating_plots/create-line-plot-with-markers.html

Ответы [ 3 ]

3 голосов
/ 22 января 2020

Альтернативный подход - использовать plot3 для построения линий me sh вручную. Таким образом, вы можете плавно построить каждую линию, используя все точки данных, но не иметь столько линий.

[X,Y,Z] = peaks(201);
step = 5;

plot3(X(:,1:step:end),Y(:,1:step:end),Z(:,1:step:end),'k')
hold on
plot3(X(1:step:end,:).',Y(1:step:end,:).',Z(1:step:end,:).','k')
hold off

enter image description here

3 голосов
/ 21 января 2020

Я думаю, что вашим лучшим вариантом было бы создать график surf без линий сетки (показывая цветную поверхность с полным разрешением ваших данных), а затем наложить с пониженной выборкой mesh участок. Примерно так:

surf(data, 'EdgeColor', 'none');
hold on;
mesh(data(1:10:end, 1:10:end), 'EdgeColor', 'black');

Вы также можете добавить некоторую прозрачность на график surf, чтобы сделать меня sh видимым через него:

surf(data, 'FaceAlpha', 0.7, 'EdgeColor', 'none');
2 голосов
/ 22 января 2020

Ответ от @David хороший. В дополнение к его подходу мы также можем заменить plot3 на множество бесконечно малых mesh. Идея состоит в том, чтобы построить mesh для отдельных векторов много раз.

[X,Y,Z] = peaks(201);

tempz = NaN(201, 201);

tempz(1, :) = Z(1, :);
mesh(X, Y, tempz, 'EdgeColor', 'interp');
hold on

% plot x lines
for i = 2:10:201
    tempz = NaN(201, 201);
    tempz(i, :) = Z(i, :);
    mesh(X, Y, tempz, 'EdgeColor', 'interp');
end

% plot y lines
for i = 2:10:201
    tempz = NaN(201, 201);
    tempz(:, i) = Z(:, i);
    mesh(X, Y, tempz, 'EdgeColor', 'interp');
end

Оригинал

enter image description here

Используя Приведенный выше фрагмент кода дает

enter image description here

Преимущество этого ответа @ David заключается в том, что вы можете сохранить все необычные свойства mesh для пример shading interp et c.

...