Yossale
Yossale

Reputation: 14361

Plotting surface in Octave results in non-uniform surface?

I'm trying to plot the attached data in octave. The 1st column is the X values, the 2nd is the Y value, and the last is the Z values.

I'm running this script:

xVec = reshape(mat(:,1),25,9); 
yVec = reshape(mat(:,2),25,9); 
zVec = reshape(mat(:,3),25,9); 
surf(xVec,yVec,zVec);
axis([0.15 0.85 0.15 0.85]);
set(gca, 'XTick',0.20:0.05:0.80);
set(gca, 'YTick',0.20:0.05:0.80);

But I keep getting an uneven surface which is very hard to understand. Why is that? What am I missing? plotted surface

The data:

0.15 0.15 40.802
 0.15 0.2 40.673
 0.15 0.25 40.526
 0.15 0.3 40.83
 0.15 0.35 40.862
 0.15 0.4 40.652
 0.15 0.45 40.924
 0.15 0.5 40.774
 0.15 0.55 41.088
 0.15 0.6 40.749
 0.15 0.65 41.099
 0.15 0.7 41.753
 0.15 0.75 41.607
 0.15 0.8 41.911
 0.15 0.85 41.537
 0.2 0.15 39.809
 0.2 0.2 39.884
 0.2 0.25 40.595
 0.2 0.3 40.497
 0.2 0.35 40.863
 0.2 0.4 41.325
 0.2 0.45 40.916
 0.2 0.5 40.431
 0.2 0.55 40.583
 0.2 0.6 40.858
 0.2 0.65 40.548
 0.2 0.7 41.668
 0.2 0.75 41.863
 0.2 0.8 41.499
 0.2 0.85 41.903
 0.25 0.15 39.894
 0.25 0.2 39.686
 0.25 0.25 40.227
 0.25 0.3 40.625
 0.25 0.35 40.572
 0.25 0.4 41.034
 0.25 0.45 40.828
 0.25 0.5 40.802
 0.25 0.55 40.196
 0.25 0.6 40.493
 0.25 0.65 41.265
 0.25 0.7 40.963
 0.25 0.75 41.023
 0.25 0.8 41.396
 0.25 0.85 41.596
 0.3 0.15 39.546
 0.3 0.2 40.216
 0.3 0.25 39.535
 0.3 0.3 39.945
 0.3 0.35 40.108
 0.3 0.4 40.726
 0.3 0.45 40.187
 0.3 0.5 41.279
 0.3 0.55 40.747
 0.3 0.6 41.122
 0.3 0.65 40.91
 0.3 0.7 40.292
 0.3 0.75 41.04
 0.3 0.8 41.287
 0.3 0.85 42.023
 0.35 0.15 38.693
 0.35 0.2 40.269
 0.35 0.25 40.561
 0.35 0.3 40.536
 0.35 0.35 40.268
 0.35 0.4 39.947
 0.35 0.45 40.259
 0.35 0.5 40.146
 0.35 0.55 41.048
 0.35 0.6 40.263
 0.35 0.65 40.875
 0.35 0.7 41.281
 0.35 0.75 40.836
 0.35 0.8 41.322
 0.35 0.85 41.734
 0.4 0.15 39.321
 0.4 0.2 39.103
 0.4 0.25 39.694
 0.4 0.3 40.529
 0.4 0.35 40.272
 0.4 0.4 39.826
 0.4 0.45 40.224
 0.4 0.5 40.808
 0.4 0.55 40.66
 0.4 0.6 40.003
 0.4 0.65 41.626
 0.4 0.7 41.549
 0.4 0.75 41.523
 0.4 0.8 41.408
 0.4 0.85 41.545
 0.45 0.15 39.428
 0.45 0.2 39.53
 0.45 0.25 39.988
 0.45 0.3 40.039
 0.45 0.35 40.075
 0.45 0.4 40.206
 0.45 0.45 40.946
 0.45 0.5 41.027
 0.45 0.55 41.214
 0.45 0.6 40.98
 0.45 0.65 40.874
 0.45 0.7 41.483
 0.45 0.75 41.151
 0.45 0.8 41.123
 0.45 0.85 40.528
 0.5 0.15 39.477
 0.5 0.2 39.62
 0.5 0.25 40.265
 0.5 0.3 39.61
 0.5 0.35 40.109
 0.5 0.4 40.232
 0.5 0.45 40.212
 0.5 0.5 40.861
 0.5 0.55 39.665
 0.5 0.6 41.225
 0.5 0.65 40.577
 0.5 0.7 40.62
 0.5 0.75 41.244
 0.5 0.8 40.977
 0.5 0.85 41.753
 0.55 0.15 39.033
 0.55 0.2 39.769
 0.55 0.25 40.164
 0.55 0.3 40.351
 0.55 0.35 40.592
 0.55 0.4 40.227
 0.55 0.45 40.14
 0.55 0.5 40.734
 0.55 0.55 40.429
 0.55 0.6 40.701
 0.55 0.65 40.849
 0.55 0.7 40.596
 0.55 0.75 41.481
 0.55 0.8 41.27
 0.55 0.85 40.755
 0.6 0.15 38.944
 0.6 0.2 39.76
 0.6 0.25 39.051
 0.6 0.3 40.009
 0.6 0.35 39.84
 0.6 0.4 40.072
 0.6 0.45 41.282
 0.6 0.5 40.606
 0.6 0.55 40.98
 0.6 0.6 41.141
 0.6 0.65 40.111
 0.6 0.7 41.627
 0.6 0.75 41.798
 0.6 0.8 41.196
 0.6 0.85 41.35
 0.65 0.15 39.457
 0.65 0.2 39.38
 0.65 0.25 40.26
 0.65 0.3 40.142
 0.65 0.35 39.935
 0.65 0.4 40.496
 0.65 0.45 39.862
 0.65 0.5 40.665
 0.65 0.55 40.187
 0.65 0.6 40.955
 0.65 0.65 39.834
 0.65 0.7 40.641
 0.65 0.75 41.162
 0.65 0.8 41.028
 0.65 0.85 41.54
 0.7 0.15 38.938
 0.7 0.2 39.803
 0.7 0.25 39.485
 0.7 0.3 39.8
 0.7 0.35 39.459
 0.7 0.4 39.895
 0.7 0.45 40.203
 0.7 0.5 40.222
 0.7 0.55 40.176
 0.7 0.6 41.01
 0.7 0.65 41.433
 0.7 0.7 41.651
 0.7 0.75 41.018
 0.7 0.8 41.185
 0.7 0.85 41.216
 0.75 0.15 39.182
 0.75 0.2 38.856
 0.75 0.25 39.992
 0.75 0.3 40.005
 0.75 0.35 39.613
 0.75 0.4 39.526
 0.75 0.45 40.232
 0.75 0.5 40.45
 0.75 0.55 41.157
 0.75 0.6 40.578
 0.75 0.65 41.106
 0.75 0.7 41.252
 0.75 0.75 40.773
 0.75 0.8 41.207
 0.75 0.85 42.219
 0.8 0.15 39.33
 0.8 0.2 39.463
 0.8 0.25 39.435
 0.8 0.3 40.252
 0.8 0.35 39.819
 0.8 0.4 39.826
 0.8 0.45 40.506
 0.8 0.5 41.031
 0.8 0.55 40.666
 0.8 0.6 41.306
 0.8 0.65 40.674
 0.8 0.7 41.489
 0.8 0.75 40.956
 0.8 0.8 41.61
 0.8 0.85 41.099
 0.85 0.15 39.247
 0.85 0.2 38.983
 0.85 0.25 39.051
 0.85 0.3 39.098
 0.85 0.35 39.617
 0.85 0.4 40.541
 0.85 0.45 40.091
 0.85 0.5 40.435
 0.85 0.55 40.55
 0.85 0.6 40.204
 0.85 0.65 40.682
 0.85 0.7 40.965
 0.85 0.75 41.063
 0.85 0.8 41.113
 0.85 0.85 41.577

Upvotes: 0

Views: 224

Answers (2)

Dani Gehtdichnixan
Dani Gehtdichnixan

Reputation: 1285

(This is only true for matlab, so I don't know if octav is any different, but I don't think so.)

The problem is that surf needs a very specific input format, it does not work with vectors.

the function you would want is griddata which interpolates any 3D or 4D input data on an even grid (which would be the needed input of surf).

It works somewhat like this:

xVec=mat(:,1);
yVec=mat(:,2);
zVec=mat(:,3);
gridpoints = 100;
[xi, yi] = meshgrid(linspace(min(xVec),max(xVec),gridpoints),linspace(min(xVec),max(xVec),gridpoints));
zi = griddata(xVec,yVec,zVec,xi,yi);
surf(xi,yi,zi);

Upvotes: 1

Ander Biguri
Ander Biguri

Reputation: 35525

Well, as far as I can see in your data X values change every 15 points, so do Y and Z. It seems you are reshaping incorrectly.

Try the next really small changes to your code:

xVec = reshape(data(:,1),15,15); 
yVec = reshape(data(:,2),15,15); 
zVec = reshape(data(:,3),15,15); 
surf(xVec,yVec,zVec);
axis([0.15 0.85 0.15 0.85]);
set(gca, 'XTick',0.20:0.05:0.80);
set(gca, 'YTick',0.20:0.05:0.80);

Output:

enter image description here

Upvotes: 3

Related Questions