如何绘制像维基百科这样的数字?

时间:2018-11-20 07:30:19

标签: python matlab matplotlib plot

我正在尝试演示像傅立叶变换这样的概念。在网上搜索时,我在Wikipedia中遇到了一张图片:

enter image description here

是否可以在Python或MATLAB中绘制该图形?

2 个答案:

答案 0 :(得分:3)

查看plot3patch的文档以及一些标准绘图工具。

此代码产生以下图像:

t = 0:.01:2*pi;
x1 = 1/2*sin(2*t);
x2 = 1/3*sin(4*t);
x3 = 1/4*sin(8*t);
x4 = 1/6*sin(16*t);
x5 = 1/8*sin(24*t);
x6 = 1/10*sin(30*t);

step = double(x1>0);
step(step==0) = -1;
step = step*.5;

figure
hold on
plot3(t,ones(size(t))*0,step,'r')

plot3(t,ones(size(t))*1,x1,'b')
plot3(t,ones(size(t))*2,x2,'b')
plot3(t,ones(size(t))*3,x3,'b')
plot3(t,ones(size(t))*4,x4,'b')
plot3(t,ones(size(t))*5,x5,'b')
plot3(t,ones(size(t))*6,x6,'b')

plot3([2*pi+.5 2*pi+.5],[.5 6],[0 0],'b')
plot3([2*pi+.5 2*pi+.5],[1 1],[0 1/2],'b')
plot3([2*pi+.5 2*pi+.5],[2 2],[0 1/3],'b')
plot3([2*pi+.5 2*pi+.5],[3 3],[0 1/4],'b')
plot3([2*pi+.5 2*pi+.5],[4 4],[0 1/6],'b')
plot3([2*pi+.5 2*pi+.5],[5 5],[0 1/8],'b')
plot3([2*pi+.5 2*pi+.5],[6 6],[0 1/10],'b')

hold off
view([45,45])
patch([0 2*pi 2*pi 0 0],[0 0 0 0 0],[-1 -1 1 1 -1],'g','FaceAlpha',.3,'EdgeColor','none')
patch([2*pi+.5 2*pi+.5 2*pi+.5 2*pi+.5 2*pi+.5],[.5 6 6 .5 .5],[-1 -1 1 1 -1],'g','FaceAlpha',.3,'EdgeColor','none')

zlim([-1,1])
xlim([-.5,2*pi+.5])
ylim([-.5,6.5])

axis off

tmp

它可以作为您的起点。

由于您已经阅读过有关fft的文章,因此我将红色图解留给您自己练习;-)

答案 1 :(得分:0)

绘制3D线的功能是plot3

以下代码将产生不同的行

T=(0:.01:2).';
X = repmat(1:6,[length(T),1]);
phase = bsxfun(@times,T*2*pi,1:2:11);
Z = 4/pi*bsxfun(@rdivide,sin(phase),1:2:11);

Xsum = zeros(size(T));
Zsum = sum(Z,2);

figure;
plot3(X,T,Z,'b');
hold on
plot3(Xsum,T,Zsum,'r');
带有Alpha通道的

patch对象可以用于灰色表面。

Xpatch=zeros(4,1);
Ypatch= [0 2 2 0].';
Zpatch= [2 2 -2 -2].';
patch(Xpatch,Ypatch,Zpatch,[.5 .5 .5],'FaceAlpha',.3,'EdgeColor',[.5 .5 .5]);
% patch(X,Y,Z,FaceColor_RGB_triplet,'Name','Value',...)
% FaceAlpha : transparency
% EdgeColor : RGB triplet for the edge

同样可以用来绘制频谱