在MatLab中绘制标准化价格的3D图形

时间:2015-07-12 05:46:48

标签: matlab plot 3d

我正在进行高斯过程,并且每年从给定矩阵计算回归,其中每行代表一年,因此代码为:

M1 = MainMatrix; %This is the given Matrix 
ker =@(x,y) exp(-1013*(x-y)'*(x-y)); 
[ns, ms] = size(M1);

for N = 1:ns
    x = M1(N,:);
    C = zeros(ms,ms);
    for i = 1:ms 
        for j = 1:ms 
            C(i,j)= ker(x(i),x(j));
        end
    end

    u = randn(ms,1); 
    [A,S, B] = svd(C);
    z = A*sqrt(S)*u; % z = A S^.5 u 

我想在Graph 3D中绘制每个回归,如下所示:

enter image description here

我知道情节是ribbon,但我不知道我该怎么做

2 个答案:

答案 0 :(得分:1)

可以在不使用ribbon的情况下生成所需的绘图。只需使用surf - 所有价格的图表和fill3 - z = 0 的平面图。平面的边界根据图的实际极限计算。因此,我们需要在绘制平面之前设置限制。然后只需要进行一些调整即可生成几乎相同的外观。

以下是代码:

% generate some data
days  = (1:100)';
price = days*[0.18,-0.08,0.07,-0.10,0.12,-0.08,0.05];
price = price + 0.5*randn(size(price));
years = 2002+(1:size(price,2));

% prepare plot
width = 0.6;
X = ones(size(price,1),1)*0.5;
X = [-X,X]*width;
figure; hold on;

% plot all 'ribbons'
for i = 1:size(price,2)
    h = surf([days,days],X+years(i),[price(:,i),price(:,i)]);
    set(h,'MeshStyle','column');
end

% set axis limits
set(gca,'ZLim',[-20,20]);

% plot plane at z=0
limx = get(gca,'XLim');
limy = get(gca,'YLim');
fill3(reshape([limx;limx],1,[]),[flip(limy),limy],zeros(1,4),'g','FaceAlpha',0.2)

% set labels
xlabel('Day of trading')
ylabel('Year')
zlabel('Normalized Price')

% tweak appearance
set(gca,'YTick',years);
set(gca,'YDir','reverse');
view([-38,50])
colormap jet;
grid on;
%box on;

结果如下: result1

答案 1 :(得分:0)

这是一个ribbon的情节,在y = 0处有一个额外的表面,可以用fill3

绘制