matlab - 在 Matlab 中绘制类似于使用 Gnuplot 获得的曲面图?

标签 matlab graph plot spatial

更新:

Link到我的测试数据集

我有一些这样的数据:

10.0 11.0 0.5
10.0 12.0 0.5
10.0 14.5 0.5
10.0 16.0 0.5
10.0 18.5 0.5
10.0 19.0 0.5
10.0 19.5 0.5
10.0 20.0 0.5

使用 Gnuplot,我可以绘制下图:

enter image description here

使用我编写的以下脚本:

set data style lines
set surface
set dgrid3d 30,30
set hidden3d
set ticslevel 0.8
set isosample 40,40

set view 60, 30, 1, 1
set contour base

splot "dataset" using 2:1:($3) notitle

我正在尝试对这张图做一些分析,所以想把它输入到 Matlab 中,但我不确定如何绘制它。我尝试将数据集导入 Matlab,这就是我能达到的程度。我正在加载文件并使用以下 Matlab 语句进行绘图:

load data
rangeY = floor(min(data(:,2))):.5:ceil(max(data(:,2)))
rangeX = floor(min(data(:,1))):.5:ceil(max(data(:,1)))
[X,Y] = meshgrid(rangeX,rangeY)
Z = griddata(data(:,1),data(:,2),data(:,3),X,Y, 'cubic')
surf(X,Y,Z)

enter image description here

图片看起来与我完全不同(轴范围、形状等)有人能告诉我如何获得与我通过 Gnuplot 获得的相似的图吗?

最佳答案

surf 不能立即工作的原因是数据非常嘈杂,如果你打电话你就会看到

plot3(data(:,1),data(:,2),data(:,3),'.')

因此,您首先需要平滑数据(我想这也是 gnuplot 函数所做的)。下面是一种平滑数据的方法

%# set bin edges (maybe you want to do 5:10:205)
xEdge = 10:10:200;
yEdge = xEdge;

%# bin the data
xId = sum(bsxfun(@ge,data(:,1),xEdge(2:end-1)),2)+1;
yId = sum(bsxfun(@ge,data(:,2),yEdge(2:end-1)),2)+1;

%# average z within every bin
smoothData = accumarray([xId,yId],data(:,3),[length(xCenter),length(yCenter)],@mean);

%# remove bins with no data
smoothData(smoothData==0) = NaN;

%# bin centers
xCenter = (xEdge(1:end-1)+xEdge(2:end))/2;
yCenter = xCenter;

%# plot
meshc(xCenter,yCenter,smoothData)

enter image description here

关于matlab - 在 Matlab 中绘制类似于使用 Gnuplot 获得的曲面图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190056/

相关文章:

matlab - matlab中的自定义 Axis 刻度

algorithm - 过滤电位计数据时出现问题(嘈杂、高尖峰)

matlab - 填充 3d 图像的孔

python - 在同一张图中,针对 matplotlib 中不同时间戳的多个 X 值绘制多个 Y 值?

plot - Tikzpicture - 绘图标签旁边/下方的箭头

matlab - 在 Matlab 中对 .csv 文件使用 textscan

python-igraph 访问图的特定顶点

algorithm - 这是我能得到的最好的复杂度吗?

r - 使用 for 循环在 R 中创建多个具有不同图例比例的气泡图

python - Matplotlib 3D 条形图 : axis issue