【Matlab】二维图堆叠为三维图

最近看到有人问下面的图应该怎么画。最简单的方法是使用Origin,Origin也可以很容易实现上述的功能,绘图教程:http://www.cappchem.com/Article2014/1108.html

但是,目前笔者在Matlab中尚未找到现成的相关的绘图方法供我们使用,如果看到这里的某位看官知道Matlab简单的方法,希望不吝赐教,在评论区留言给笔者。这里只是介绍一种通过Matlab代码的方式如何实现。 首先,我们以一个简单的实例开始,假设我们需要画的是下面的一个三维图,和一般的三维散点图不同的是YOZ平面的散点使用折线连接在了一起。

data=textread('F:/时段.txt');
data=data(:,1:end-1);

car_num = size(data,1);
day_num = size(data,2);
hour_num = 3;

for i=1:car_num%车序号
    %每辆车一条曲线
    count = 1;
    u = [];
    for j=1:day_num%天序号
        u(count,1) = i;
     	u(count,2) = j;
     	u(count,3) = data(i,j);
       	count = count + 1;
    end

    %绘制每辆车的曲线
    x=u(:,1);%车
    y=u(:,2);%天
    z=u(:,3);%时段
    plot3(x,y,z,'bo',x,y,z);
    grid on;
    hold on;
    axis([0, car_num+1,0,day_num,0,hour_num]);% 坐标轴的显示范围
    set(gca, 'XTick', 0:car_num+1); % 车
    set(gca, 'YTick', 0:day_num); % 天
    set(gca, 'ZTick', 0:hour_num); % 时段
end

xlabel('车');
ylabel('天');
zlabel('时段');
title('折线图');
3	3	2	0	0	0	0	1	3	1	3	0	0	0	0	3	1	3	0	0	0	0	1	0	0	0	0	2	2	2	
1	0	1	2	0	0	0	0	1	3	1	0	0	0	0	2	2	1	0	0	0	0	1	1	1	0	0	0	0	3	
1	3	3	1	0	0	0	0	0	1	0	0	0	0	1	2	1	3	0	0	0	0	3	1	2	0	0	0	0	2	
2	0	0	0	0	1	2	3	3	0	0	0	0	3	2	3	0	0	0	0	2	3	2	0	0	0	0	2	1	2	
0	3	1	3	0	0	0	0	0	3	2	0	0	0	0	0	2	1	2	0	0	0	0	0	3	3	1	3	0	0	
0	0	3	2	3	2	0	0	0	0	1	3	3	2	0	0	0	0	3	0	3	0	0	0	0	2	1	3	2	0	
2	2	2	0	0	0	0	2	1	2	2	0	0	0	0	0	2	1	2	2	0	0	0	0	2	1	0	2	0	0	
1	0	0	0	0	1	1	1	2	0	0	0	0	3	2	2	1	0	0	0	0	3	1	3	3	0	0	0	0	1	
2	0	0	0	0	3	3	1	3	0	0	0	0	2	2	0	0	0	0	0	3	3	2	0	0	0	0	2	1	2	
0	0	0	2	0	1	3	0	0	0	0	0	3	1	1	3	0	0	0	0	1	2	1	0	0	0	0	3	1	3	
3	0	0	3	0	0	0	0	3	1	2	3	0	0	0	0	2	2	0	1	0	0	0	0	2	1	3	0	0	0	
3	2	2	3	0	0	0	0	2	2	2	0	0	0	0	1	1	1	0	0	0	0	3	3	2	0	0	0	0	1	
0	0	0	0	2	2	3	2	0	0	0	0	1	3	3	0	0	0	0	1	2	2	0	0	0	0	3	0	2	3	
3	0	2	0	0	0	0	2	3	3	2	0	0	0	0	1	2	3	0	0	0	0	2	2	1	1	0	0	0	0	
0	0	0	0	3	3	3	1	0	0	0	0	2	1	0	0	0	0	0	3	1	1	0	0	0	0	1	0	2	3	
3	0	2	0	0	0	0	3	2	2	1	0	0	0	0	1	2	2	1	0	0	0	0	2	3	3	3	0	0	0	
0	0	1	2	0	0	0	0	2	3	2	0	0	0	0	0	3	3	0	0	0	0	0	1	0	0	0	0	3	3	
1	0	3	1	0	0	0	0	2	1	1	0	0	0	0	1	1	2	0	0	0	0	1	2	2	1	0	0	0	0	
0	0	1	1	2	0	0	0	0	3	2	0	1	0	0	0	0	3	1	1	3	0	0	0	0	0	0	3	3	1	
1	2	0	0	0	0	1	3	3	2	0	0	0	0	3	2	3	1	0	0	0	0	0	3	2	3	1	0	0	0	
2	1	2	3	0	0	0	0	1	2	1	0	0	0	0	0	3	1	1	0	0	0	0	3	1	1	2	0	0	0	
0	0	1	1	1	0	0	0	0	1	2	0	3	0	0	0	0	1	0	3	3	0	0	0	0	3	3	3	3	0	
0	0	0	0	2	1	1	1	0	0	0	0	3	3	3	0	0	0	0	0	1	3	3	2	0	0	0	0	2	3	
0	0	1	2	1	3	0	0	0	0	1	2	3	2	0	0	0	0	1	0	2	2	0	0	0	0	1	1	2	1	
0	0	0	0	2	3	3	3	0	0	0	0	1	1	3	2	0	0	0	0	1	2	3	3	0	0	0	0	3	1	
0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	0	0	2	0	0	0	0	0	0	0	
3	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	1	0	
0	1	0	1	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	2	0	0	0	0	0	0	0	0	0	
0	0	0	0	0	3	0	1	2	0	0	0	0	1	3	0	0	0	0	0	3	0	0	0	0	0	0	3	0	1	
0	0	1	0	0	0	0	0	0	0	0	3	0	0	0	0	0	0	1	0	0	0	0	2	0	0	0	0	2	2	
2	0	0	3	0	0	0	0	0	3	0	0	1	0	0	0	0	0	2	0	0	0	0	0	2	0	0	0	0	0	
0	1	0	0	0	0	0	3	0	0	0	0	0	0	0	0	1	0	0	0	0	1	3	0	3	0	0	0	0	1	
0	0	3	2	0	0	0	0	2	0	0	0	0	0	0	3	0	0	0	0	1	0	3	0	0	0	0	3	2	0	
0	0	0	1	0	1	0	0	0	0	0	0	2	0	2	0	0	0	0	0	0	0	0	1	0	0	0	0	0	2	
0	0	0	0	1	0	0	2	0	0	0	0	3	3	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	
0	0	0	3	0	0	0	0	1	0	0	1	0	0	0	0	0	1	2	0	2	0	0	0	0	3	0	0	3	0	
3	1	1	0	0	0	0	3	0	0	0	0	2	0	0	0	0	0	0	0	0	0	0	0	0	1	0	0	0	0	
0	0	0	0	0	0	0	2	0	1	0	0	0	0	2	0	0	0	0	0	0	0	0	0	1	0	0	2	0	0	
0	0	0	2	2	0	0	0	0	3	3	1	0	0	0	0	1	2	3	1	0	0	0	0	0	2	1	3	0	0	
0	2	0	1	3	0	0	0	0	0	0	0	1	2	0	0	0	0	2	1	3	0	0	0	0	0	0	0	0	3	
0	0	1	0	0	0	0	1	0	0	0	0	0	0	0	0	1	1	0	3	0	0	0	0	0	2	3	0	2	0	
0	0	0	0	0	0	0	2	1	0	0	0	0	0	0	0	0	0	0	2	1	0	0	0	0	0	0	1	0	1	
3	0	0	0	0	1	0	3	2	0	0	0	0	0	0	0	2	3	0	0	0	0	3	1	0	1	0	0	0	0	
0	0	3	0	0	1	0	0	0	0	0	0	0	3	0	0	1	0	0	0	0	1	2	2	3	0	0	0	0	0	
0	0	3	1	2	0	0	0	0	1	0	3	0	0	0	0	0	1	0	0	0	0	2	0	3	1	0	0	0	0	
2	0	0	2	0	0	0	0	0	0	0	0	2	2	2	0	0	0	0	0	0	0	1	1	0	2	0	0	0	0	
0	1	0	0	0	0	0	1	1	3	0	0	0	0	0	3	0	3	0	0	0	0	0	2	3	2	0	0	0	0	
0	0	0	0	0	3	0	3	0	0	0	0	0	0	0	0	1	0	2	0	0	0	0	0	2	3	0	2	0	0	
3	0	3	0	0	0	0	1	0	0	0	0	3	3	0	0	0	0	1	1	0	0	0	0	1	1	0	1	0	0	
0	0	0	1	0	0	0	0	0	0	0	0	2	0	0	0	0	2	0	3	0	0	0	0	2	0	0	0	0	2	
0	0	0	1	0	0	0	0	2	0	0	0	0	0	2	0	3	2	0	0	0	0	0	0	2	2	3	0	0	0	
0	0	0	2	1	1	0	0	0	0	0	2	0	0	0	0	2	0	0	0	0	0	3	1	2	1	0	0	0	0	
0	0	1	2	1	2	0	0	0	0	0	0	1	1	3	3	0	0	0	0	3	0	0	0	0	1	0	0	2	0	
0	0	0	3	0	0	0	0	1	3	0	0	0	0	0	0	1	1	0	0	0	0	2	0	0	0	0	1	0	3	
0	0	0	1	0	0	0	0	0	3	0	0	2	0	0	0	0	3	0	0	0	0	1	2	0	2	0	0	0	0	

其中,数据共55行,每一行数据代表一辆车的信息,该行中的第i列代表该车的第i天的状态,例如第一行,第一列中的3代表,第一辆车在第一天的第三个时段出行。

有了上面的基础,是不是就可以绘制类似于下面的图了?其实和下图相比,上图只要YOZ平面上有足够多的的点,同时,X值的个数再少一点,就可以达到下述的效果。

如果你还想添加一个网格,那么可以这样,以下内容参考自Matlab官网提供的示例。

[Y,Z] = meshgrid(1:0.5:10,1:20);
X = zeros(size(X));
surf(X,Y,Z)

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值