我在Matlab中有一个数组,每个时间步都会更新:每行对应一个时间,每列代表距离中心一定半径的温度。如果可以使用meshgrid
和contourf
命令将颜色渐变应用于绘图,也会很方便。到目前为止,这是我所拥有的Matlab代码,但我不确定如何将温度调整到绘图中并为温度变化设置动画。
Tinf = 200; % ambient temperature
% where r1 = radius1, r2 = radius2, etc.
% t = time
% rows = time
% columns = radius
% r1 r2 r3 r4 r5
T = [98 105 110 118 128; % t=1
109 110 117 124 134; % t=2
110 118 120 130 144]; % t=3
r = 0.08; % radius of circle
rx = -r:0.01:r;
ry = r:-0.01:-r;
[x_coor, y_coor] = meshgrid(rx, ry);
radius = sqrt(x_coor.^2+y_coor.^2);
figure(1)
contourf(radius,'edgecolor','none')
我正在尝试在Matlab中创建一个圆形图,它将显示每个半径的温度(颜色),并随着时间的推移随着时间的推移而增加或减少该温度(变化颜色)。
某个时间的这种情节的一个例子是:
因此T阵列中的列1对应于图中的节点1,列2对应于节点2等。因此,在时间= 0,则node1 = 98,node2 = 105,node3 = 110,node4 = 118,node5 = 128;在时间= 1,则node1 = 109,node2 = 110,node3 = 117,node4 = 124,node5 = 134;等等。
任何有关完成此类情节的建议都会非常有用。
答案 0 :(得分:2)
与@Magla的好答案相同,但绘制单个曲面(不是叠加)允许插值
T = [98 105 110 118 128;
109 110 117 124 134;
114 118 120 130 138];
Rmax = 30;
[x,y,z] = sphere(100);
x=x*Rmax;
y=y*Rmax;
rxy2 = x.^2+y.^2;
r = [0 10 20 30];
r2 = r.^2;
figure('Color', 'w');
for ind_t = 1:size(T,1)
for ii = 1:length(r2)-1
ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
z(ir_find) = T(ind_t,ii);
end
hax = axes('Position',[0 0 1 1]);
h = surf(x,y,z) % sphere centered at origin
shading interp
set(h, 'EdgeColor', 'None');
view(0,90);
axis equal;
set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
pause(0.5);
end
修改强>
重写为使用meshgrid并使用感兴趣的特定半径等。确保将r_res调整为您认为合适的值。
T = [98 105 110 118 128;
109 110 117 124 134;
114 118 120 130 138];
%---------------------------------------
r = 0.08; % radius of circle
r_res = 0.0005;
rx = -r:r_res:r;
ry = rx;
[x, y] = meshgrid(rx, ry);
rxy2 = x.^2+y.^2;
z=ones(size(rxy2))*NaN;
%---------------------------------------
Nshells = size(T,2);
r = [0:1/Nshells:1]*r;
r2 = r.^2;
figure('Color', 'w');
colormap hot
for ind_t = 1:size(T,1)
for ii = 1:Nshells
ir_find = find(rxy2<=r2(ii+1) & rxy2>r2(ii));
z(ir_find) = T(ind_t,ii);
end
hax = axes('Position',[0 0 1 1]);
h = surf(x,y,z) % sphere centered at origin
shading interp
set(h, 'EdgeColor', 'None');
view(0,90);
axis equal;
set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
pause(0.5);
end
答案 1 :(得分:1)
这是一个使用sphere
的解决方案。 sphere
生成矩阵x
和y
,乘以减少的半径r
,矩阵z
减少为单个值(球体变为一个磁盘)。 z
乘以温度,磁盘相互重叠。颜色取决于整个输入矩阵的min
和max
。动画使用pause
完成。
T = [98 105 110 118 128;
109 110 117 124 134;
114 118 120 130 138];
[x,y,z] = sphere(100);
r = [50 40 30 20 10];
figure('Color', 'w');
for ind_t = 1:size(T,1)
hax = axes('Position',[0 0 1 1]);
for ii = 1:length(r)
h = surf(x*r(ii),y*r(ii),z*0+T(ind_t,ii)) % sphere centered at origin
set(h, 'EdgeColor', 'None');
hold on;
end
view(0,90);
axis equal;
set(hax, 'Visible', 'Off', 'CLim', [min(T(:)) max(T(:))]);
pause(0.5);
end
这给出了