Surf() в Matlab показывает только два цвета вместо нескольких цветов

Я использую следующие строки кода для построения графика:

nthTheta=1;
gammaSurf=reshape(gamma(:,nthTheta,:),size(gamma,1),size(gamma,3));
figure
[spatial_lag,temporal_lag]=meshgrid(distance,4:4:12);
surf(gammaSurf,spatial_lag',temporal_lag')
colorbar
xlabel('Spatial Lag','Fontweight','Bold')
ylabel('Temporal Lag','Fontweight','Bold')
zlabel('\gamma (h,t)','Fontweight','Bold')
title('Spatiotemporal Empirical Variogram','Fontweight','Bold')

Матрица gammaSurf имеет следующие значения, которые показывают, что ее значения меняются:

введите здесь описание изображения

Я получаю следующий график только с двумя цветами вместо нескольких цветов:

введите здесь описание изображения

Я делаю что-то не так, из-за чего я не получаю график с несколькими цветовыми вариациями, которые я ожидаю? Спасибо!


person Community    schedule 08.07.2012    source источник


Ответы (1)


Установите затенение для интерполяции:

shading(gca,'interp');

должен сделать трюк.

На самом деле, похоже, что у вас есть аргументы для surf в неправильном порядке. Если вы хотите, чтобы ось Z применялась к значениям gammasurf, это должен быть третий аргумент.

surf(spatial_lag',temporal_lag',gammasurf);

Последнее предложение: если вы действительно имели в виду, что gammasurf является значением x, но вы хотели, чтобы именно оно определяло цвет, используйте его в качестве 4-го аргумента (C):

surf(gammasurf,spatial_lag',temporal_lag',gammasurf);

Теперь поверхность будет ориентирована, как на изображении, но цвета будут меняться в зависимости от значения x, а не значения z.

person tmpearce    schedule 08.07.2012
comment
Спасибо tmpearce!! Вы правы, я получил аргументы в неправильном порядке, то есть gammaSurf должен был быть третьим аргументом. - person ; 09.07.2012