更新:
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,我可以绘制下图:
使用我编写的以下脚本:
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)
图片看起来与我完全不同(轴范围、形状等)有人能告诉我如何获得与我通过 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)
关于matlab - 在 Matlab 中绘制类似于使用 Gnuplot 获得的曲面图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5190056/