Matlab:网格数量较少的`mesh()`图
Matlab: `mesh()` plot with less number of grid
假设 data
是大小为 129 * 129
的矩阵。
通过使用
mesh(data, 'FaceColor', 'none', 'EdgeColor', 'black')
我们得到类似
的东西
我们可以发现格子很密集。我想要相同的图形,但网格线数量 较少 ,类似于
当然可以绘制较小的 data
,例如 data(1:10:end, 1:10:end)
。但是这样一来,剧情就没有以前那么准确了。
另一个例子是plot(..., 'MarkerIndices', ...)
。这可以在不修改绘图的情况下为您提供标记数量较少的绘图。 https://www.mathworks.com/help/matlab/creating_plots/create-line-plot-with-markers.html
我认为你最好的选择是创建一个 surf
plot with no grid lines (showing a colored surface with the full resolution of your data), then overlay a down-sampled mesh
情节。像这样:
surf(data, 'EdgeColor', 'none');
hold on;
mesh(data(1:10:end, 1:10:end), 'EdgeColor', 'black');
您还可以向 surf
图添加一些透明度,使网格通过它可见:
surf(data, 'FaceAlpha', 0.7, 'EdgeColor', 'none');
另一种方法是使用 plot3
手动绘制网格线。这样你就可以使用所有数据点平滑地绘制每条线,但没有那么多线。
[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
@David 的回答很好。除了他的做法,我们还可以用很多无穷小的mesh
代替plot3
。这个想法是多次为单个向量绘制 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
原来是
通过使用上面的代码片段,它给出了
与@David 的回答相比,这样做的好处是您可以保留 mesh
的所有奇特属性,例如 shading interp
等
假设 data
是大小为 129 * 129
的矩阵。
通过使用
mesh(data, 'FaceColor', 'none', 'EdgeColor', 'black')
我们得到类似
的东西我们可以发现格子很密集。我想要相同的图形,但网格线数量 较少 ,类似于
当然可以绘制较小的 data
,例如 data(1:10:end, 1:10:end)
。但是这样一来,剧情就没有以前那么准确了。
另一个例子是plot(..., 'MarkerIndices', ...)
。这可以在不修改绘图的情况下为您提供标记数量较少的绘图。 https://www.mathworks.com/help/matlab/creating_plots/create-line-plot-with-markers.html
我认为你最好的选择是创建一个 surf
plot with no grid lines (showing a colored surface with the full resolution of your data), then overlay a down-sampled mesh
情节。像这样:
surf(data, 'EdgeColor', 'none');
hold on;
mesh(data(1:10:end, 1:10:end), 'EdgeColor', 'black');
您还可以向 surf
图添加一些透明度,使网格通过它可见:
surf(data, 'FaceAlpha', 0.7, 'EdgeColor', 'none');
另一种方法是使用 plot3
手动绘制网格线。这样你就可以使用所有数据点平滑地绘制每条线,但没有那么多线。
[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
@David 的回答很好。除了他的做法,我们还可以用很多无穷小的mesh
代替plot3
。这个想法是多次为单个向量绘制 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
原来是
通过使用上面的代码片段,它给出了
与@David 的回答相比,这样做的好处是您可以保留 mesh
的所有奇特属性,例如 shading interp
等