2

我有一个 log log log 3D 图,其中我将一些数据与表面拟合。我正在疯狂地为表面提供一些透明度,以便在下面看到我的数据。这是一个最小的例子,我生成了一些随机日期并进行幂律拟合,在对数刻度中变成了平面。有什么建议吗?我基本上想要一个透明的灰色表面。我阅读了手册,使用 FaceAlpha 但无法正常工作。谢谢。一个。

%generate a vector of X and Y variables
[Log10X,Log10Y] = meshgrid(1.1:0.1:2);
Log10X = reshape(Log10X,100,1);
Log10Y = reshape(Log10Y,100,1);
%Specity Z as a function of X and Y (i.e. it lays on a plane)
A=0.3; B=0.4;
Log10Z =A*Log10X + B*Log10Y;
%%Add in a noise vector
noise =0.02*randn(100,1);
Log10Z= Log10Z + noise;
%compute "original" X,Y,Z
X = 10.^Log10X;
Y = 10.^Log10Y;
Z = 10.^Log10Z;
figure
scatter3(X,Y,Z, 'filled')
hold on
f = fittype( @(a, b, c, x, y) a*x.^b.*y.^c, 'independent', {'x', 'y'}, 'dependent', 'z');
[sf,gof] = fit( [X, Y],Z,f,'startpoint', [0.9 0.3 0.4] ) %, 'Robust', 'LAR'
XLIM = [min(X) max(X) ]
YLIM = [min(Y) max(Y) ]
HANDLEsur = plot(sf,'XLim',XLIM,'YLim',YLIM )
set(gca,'xscale','log','yscale','log','zscale','log')
xlim(XLIM)
ylim(YLIM)
set(HANDLEsur,'EdgeColor','none','FaceColor',[0.5 0.5 0.5],'FaceAlpha',0.3)   

编辑:尝试执行建议的解决方法,但是对于 3d 绘图看起来很复杂,对于 2D 绘图您可以这样做,但它不适用于 3D:

%replace linear XTickLabel with log XTickLabel
set(gca, 'XTickLabel',[])     %# suppress current x-labels 
xt = get(gca, 'XTick');
yl = get(gca, 'YLim');
str = cellstr( num2str(xt(:),'10^{%d}') );      %# format x-ticks as 10^{xx}


hTxt = text(xt, yl(ones(size(xt))), str, ...   %# create text at same locations
  'Interpreter','tex', ...                     %# specify tex interpreter
  'VerticalAlignment','top', ...               %# v-align to be underneath
  'HorizontalAlignment','center');             %# h-aligh to be centered
4

1 回答 1

3

对数轴不能具有透明度:不幸的是,MATLAB 中唯一支持透明度的渲染器是 OpengGL,但它不支持对数轴!

渲染器中的更多信息。

一种解决方法是记录转换数据,在线性轴上绘图并手动设置刻度标签。

于 2013-05-25T21:19:34.600 回答