2017-07-29 2 views
0

Ich habe 4x1 Figur Plot mit 1 Plot die obere Hälfte nehmen. Ich sehe es auf einem relativ hochauflösenden 1600x1200-Monitor, also sollte Matlab kein Problem haben, hinein zu passen. Das ist besonders merkwürdig, wenn man bedenkt, dass Matlabs eine 4x2-Figur hat, bei der alles in Ordnung ist.Matlab: der Titel des Subplot überlappt das Achsenetikett über

enter image description here enter image description here

Also, was ist das Problem mit dem 4x1 Grundstück und wie kann ich es beheben? Warum in aller Welt kann Matlab (2016b) nicht tun, was es für 4x2 kann?

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)))); 

ersten 20 Datensätze aus "battery_discharging.txt" sollte ausreichen, um den Code zum Laufen zu bringen.

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 

MCVE

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'); 

enter image description here

+1

erstellen [MCVE] –

+0

@SardarUsama dieser Code sowohl minimal und vollständig sind. und notwendig, um die Figur mit dem Problem zu erstellen. Ich fügte auch einige Daten hinzu, die benötigt werden, um eine Datei mit dem Namen "battery_discharging.txt" zu speichern. Was vermisst du noch? –

+1

Was ist 'bat_voltage'? Wenn ich Ihr Skript auf einem viel kleineren Bildschirm (mit 2017a) ausführen, kann ich dieses Problem nicht sehen. – EBH

Antwort

2

Ich weiß nicht, was das Problem verursacht, und es nicht wiedergeben kann, aber ich denke, die einfachste Lösung zu erhalten sein wird, der Griff zu den ersten Achsen:

ax = subplot(4,1,[1 2]); 

und nachdem Sie sie abgeschlossen Plotten, bewegen sie sich ein wenig:

ax.Position(2) = ax.Position(2)*1.02; % This may be adjusted 
% subplot(4,1,3); etc... 

Hier nehme ich sie um 2%, aber Sie können ein wenig mehr benötigen. Auch durch die gleiche Art und Weise können Sie die letzten Achsen ein wenig herunternehmen:

ax = subplot(4,1,4); 
% do all the plotting 
ax.Position(2) = ax.Position(2)*0.98; % This may be adjusted