Matlab:子图的标题与上面的轴标签重叠
Matlab: the title of the subplot overlaps the axis label above
我有 4x1 图,其中 1 个图占据了上半部分。我在一个相对 high-resolution 1600x1200 的显示器上查看它,所以 Matlab 应该没有问题。考虑到我有一个 4x2 的数字,这尤其奇怪,Matlabs 适合一切。
那么 4x1 图有什么问题,我该如何解决?为什么 Matlab (2016b) 不能为它做它能为 4x2 做的事?
identifier='unshielded';
bat_discharging=readtable('battery_discharging.txt','Format', '%u%f%f%f');
subplot(4,1,[1 2]);
yyaxis left;
plot(bat_discharging{:,1},bat_discharging{:,2});
ylabel('Voltage, V');
yyaxis right
plot(bat_discharging{:,1},bat_discharging{:,3});
hold on
plot(bat_discharging{:,1},bat_discharging{:,4});
ylabel('Current, A');
hold off
xlabel(bat_discharging.Properties.VariableNames{1});
legend('Voltage', 'Current with external reference',...
'Current with internal refence', 'Location','east');
title( ['Discharging, ' identifier]);
subplot(4,1,3);
[ext_currentfit,ext_gof, ext_output] = fit(double(bat_discharging{:,1}),...
bat_discharging{:,3}, 'smoothingspline');
plot(bat_discharging{10:end,1}, ext_output.residuals(10:end));
xlabel(bat_discharging.Properties.VariableNames{1});
ylabel('Current, A');
title(sprintf(...
'Battery current measurement noise, external reference, %s, span=%.3e, %s=%e',...
identifier,range(ext_output.residuals(10:end)),...
'\sigma',std(ext_output.residuals(10:end))));
subplot(4,1,4);
[int_currentfit,ext_gof, int_output] = fit(double(bat_discharging{:,1}),...
bat_discharging{:,4}, 'smoothingspline');
plot(bat_discharging{10:end,1}, int_output.residuals(10:end));
ylabel('Current, A');
xlabel(bat_discharging.Properties.VariableNames{1});
title(sprintf(...
'Battery current measurement noise, internal reference, %s, span=%.3e, %s=%e',...
identifier,range(int_output.residuals(10:end)),...
'\sigma',std(int_output.residuals(10:end))));
前 20 个数据集来自 "battery_discharging.txt"
应该足以获取代码 运行.
Sample Voltage, V Current external ref Current internal ref
1 3.327263594e+00 -8.607864380e-05 -8.599996567e-05
2 3.326871395e+00 -8.591771126e-05 -8.585631847e-05
3 3.326753676e+00 -8.580327034e-05 -8.570969105e-05
4 3.326707184e+00 -8.567452431e-05 -8.563339710e-05
5 3.326638043e+00 -8.560776711e-05 -8.552610874e-05
6 3.326614201e+00 -8.551001549e-05 -8.547961712e-05
7 3.326560557e+00 -8.546590805e-05 -8.539199829e-05
8 3.326546252e+00 -8.538603783e-05 -8.535683155e-05
9 3.326498866e+00 -8.535146713e-05 -8.528172970e-05
10 3.326489627e+00 -8.528113365e-05 -8.525252342e-05
11 3.326448202e+00 -8.525490761e-05 -8.518755436e-05
12 3.326441050e+00 -8.518815041e-05 -8.516192436e-05
13 3.326403201e+00 -8.516669273e-05 -8.509933949e-05
14 3.326398730e+00 -8.510708809e-05 -8.508086205e-05
15 3.326362669e+00 -8.508801460e-05 -8.502542973e-05
16 3.326360881e+00 -8.503198624e-05 -8.500695229e-05
17 3.326325417e+00 -8.501410484e-05 -8.495271206e-05
18 3.326324224e+00 -8.496403694e-05 -8.493661880e-05
19 3.326291144e+00 -8.494853973e-05 -8.488714695e-05
20 3.326291144e+00 -8.489966393e-05 -8.487284184e-05
x = 1:100;
y = rand(100, 1);
subplot(3,1,[1 2]);
plot(x, y);
xlabel('label');
subplot(3,1,3);
plot(x, y);
title('TITLE');
我不知道是什么原因导致了这个问题,也无法重现,但我认为最简单的解决方案是获取第一个轴的句柄:
ax = subplot(4,1,[1 2]);
完成绘制后,将它们向上移动一点:
ax.Position(2) = ax.Position(2)*1.02; % This may be adjusted
% subplot(4,1,3); etc...
这里我占了 2%,但你可能需要多一点。同样,你可以把最后一个坐标轴往下一点:
ax = subplot(4,1,4);
% do all the plotting
ax.Position(2) = ax.Position(2)*0.98; % This may be adjusted
我有 4x1 图,其中 1 个图占据了上半部分。我在一个相对 high-resolution 1600x1200 的显示器上查看它,所以 Matlab 应该没有问题。考虑到我有一个 4x2 的数字,这尤其奇怪,Matlabs 适合一切。
那么 4x1 图有什么问题,我该如何解决?为什么 Matlab (2016b) 不能为它做它能为 4x2 做的事?
identifier='unshielded';
bat_discharging=readtable('battery_discharging.txt','Format', '%u%f%f%f');
subplot(4,1,[1 2]);
yyaxis left;
plot(bat_discharging{:,1},bat_discharging{:,2});
ylabel('Voltage, V');
yyaxis right
plot(bat_discharging{:,1},bat_discharging{:,3});
hold on
plot(bat_discharging{:,1},bat_discharging{:,4});
ylabel('Current, A');
hold off
xlabel(bat_discharging.Properties.VariableNames{1});
legend('Voltage', 'Current with external reference',...
'Current with internal refence', 'Location','east');
title( ['Discharging, ' identifier]);
subplot(4,1,3);
[ext_currentfit,ext_gof, ext_output] = fit(double(bat_discharging{:,1}),...
bat_discharging{:,3}, 'smoothingspline');
plot(bat_discharging{10:end,1}, ext_output.residuals(10:end));
xlabel(bat_discharging.Properties.VariableNames{1});
ylabel('Current, A');
title(sprintf(...
'Battery current measurement noise, external reference, %s, span=%.3e, %s=%e',...
identifier,range(ext_output.residuals(10:end)),...
'\sigma',std(ext_output.residuals(10:end))));
subplot(4,1,4);
[int_currentfit,ext_gof, int_output] = fit(double(bat_discharging{:,1}),...
bat_discharging{:,4}, 'smoothingspline');
plot(bat_discharging{10:end,1}, int_output.residuals(10:end));
ylabel('Current, A');
xlabel(bat_discharging.Properties.VariableNames{1});
title(sprintf(...
'Battery current measurement noise, internal reference, %s, span=%.3e, %s=%e',...
identifier,range(int_output.residuals(10:end)),...
'\sigma',std(int_output.residuals(10:end))));
前 20 个数据集来自 "battery_discharging.txt" 应该足以获取代码 运行.
Sample Voltage, V Current external ref Current internal ref
1 3.327263594e+00 -8.607864380e-05 -8.599996567e-05
2 3.326871395e+00 -8.591771126e-05 -8.585631847e-05
3 3.326753676e+00 -8.580327034e-05 -8.570969105e-05
4 3.326707184e+00 -8.567452431e-05 -8.563339710e-05
5 3.326638043e+00 -8.560776711e-05 -8.552610874e-05
6 3.326614201e+00 -8.551001549e-05 -8.547961712e-05
7 3.326560557e+00 -8.546590805e-05 -8.539199829e-05
8 3.326546252e+00 -8.538603783e-05 -8.535683155e-05
9 3.326498866e+00 -8.535146713e-05 -8.528172970e-05
10 3.326489627e+00 -8.528113365e-05 -8.525252342e-05
11 3.326448202e+00 -8.525490761e-05 -8.518755436e-05
12 3.326441050e+00 -8.518815041e-05 -8.516192436e-05
13 3.326403201e+00 -8.516669273e-05 -8.509933949e-05
14 3.326398730e+00 -8.510708809e-05 -8.508086205e-05
15 3.326362669e+00 -8.508801460e-05 -8.502542973e-05
16 3.326360881e+00 -8.503198624e-05 -8.500695229e-05
17 3.326325417e+00 -8.501410484e-05 -8.495271206e-05
18 3.326324224e+00 -8.496403694e-05 -8.493661880e-05
19 3.326291144e+00 -8.494853973e-05 -8.488714695e-05
20 3.326291144e+00 -8.489966393e-05 -8.487284184e-05
x = 1:100;
y = rand(100, 1);
subplot(3,1,[1 2]);
plot(x, y);
xlabel('label');
subplot(3,1,3);
plot(x, y);
title('TITLE');
我不知道是什么原因导致了这个问题,也无法重现,但我认为最简单的解决方案是获取第一个轴的句柄:
ax = subplot(4,1,[1 2]);
完成绘制后,将它们向上移动一点:
ax.Position(2) = ax.Position(2)*1.02; % This may be adjusted
% subplot(4,1,3); etc...
这里我占了 2%,但你可能需要多一点。同样,你可以把最后一个坐标轴往下一点:
ax = subplot(4,1,4);
% do all the plotting
ax.Position(2) = ax.Position(2)*0.98; % This may be adjusted