2017-01-14 2 views
0

Ich möchte eine Matrix von Streudiagrammen in Matlab (Version R2014b) erstellen und habe nur zwei Ticks (Minimum und Maximum) für jede x- und y-Achse, weil das reale Beispiel mehr Plots hat wird leichter zu lesen sein. Hier ist ein Beispiel, und wie Sie sehen können, funktioniert die zweite for-Schleife nicht wie vorgesehen, um die Ticks zu bearbeiten. Gibt es auch eine Möglichkeit, dies ohne eine for-Schleife zu setzen?Mehrere XTick-Werte auf einmal ändern

% Example data 
     example = [ -5.2844 5.0328 307.5500 
    -12.0310 5.1611 237.9000 
    -15.9510 7.5500 290.7600 
    -11.5500 13.6850 285.8400 
    -1.9356 9.4700 273.2600 
    -9.2622 4.7456 232.6000 
    -6.5639 5.2272 265.3800 
    -4.4795 14.8320 281.1300 
    -2.1474 13.0690 288.7300 
    -3.7342 11.7450 265.2200 
    -11.9040 10.9660 286.5700 
    -2.1789 6.7442 258.9700 
    -2.8316 11.8210 281.7500 
    -2.6170 7.4740 244.8600 
    -6.8770 1.6623 116.9800 
    -10.2210 5.7575 300.2200 
    -3.9430 5.9715 253.6000 
    -3.3690 5.6530 230.9700 
    2.6090 3.2750 236.8700 
    -5.1430 8.4060 273.9600 
    -7.9360 2.7855 254.8200 
    -2.8665 2.0241 176.0600 
    -0.0960 3.3165 228.6800 
    -8.8465 10.3240 289.2100 
    -8.1930 16.4070 289.7000 
    -6.5840 13.4010 283.2600 
    2.2405 8.4625 270.1000 
    -2.2505 7.5555 285.9100 
    -4.6955 6.2985 279.2000 
    -0.7610 12.5210 283.2000 
    -0.7510 9.9470 279.9100 
    1.7120 8.5990 285.5700 
    -0.6245 7.6905 251.9100 
    -19.2320 6.8545 306.2700 
    -4.1255 9.8265 298.2000 
    2.9486 3.8881 250.2100 
    1.7333 5.5000 240.7300 
    -6.5881 3.9152 234.3800 
    -7.9543 8.0771 276.8000 
    -6.9641 8.8573 284.2800 
    -10.3280 7.4768 291.8700 
    -8.0818 5.1250 250.6600 
    -10.1490 3.9427 271.0000 
    -2.7786 3.7673 213.6500 
    -14.5410 11.1500 288.9100 
    -6.8118 11.0210 280.2000 
    -2.6459 6.5127 213.2600 
    1.4036 4.2023 253.9400 
    -5.0014 9.3900 267.0600 
    -9.7382 12.0990 290.8800] 

% Labels for data 
data_labels = {'Variable1','Variable2',... 
    'Variable3'}; 

% Make scatterplot matrix with histogram on diagonal 
figure() 
[H,AX]= plotmatrix(example(:,:)); 

% label the axes of the plots (rotated) works fine 
for i = 1:length(AX) 
    ylabel(AX(i,1),data_labels{i},'Rotation',0,'HorizontalAlignment','right',... 
     'FontSize',12); 
    xlabel(AX(end,i),data_labels{i},'Rotation',60,'HorizontalAlignment','right',... 
     'FontSize',12); 
end 

% Set ticks (not working yet) 
NumTicks = 2; 
for i = 1:length(AX) 
    L = get(AX(i,i),'XLim'); 
    set(AX(i,i),'XTick',linspace(L(1),L(2),NumTicks)); 
    % set y ticks here too 
end 
+0

Sie müssen 'AX (i)' anstelle von 'AX (i, i)' in Ihrer letzten Schleife verwenden – Suever

Antwort

1

verwenden Sie falsch i oder beide Indizes, wenn sie in AX Indizierung.

AX(i) % Rather than AX(i,i) 

Außerdem ist es besser numel als length zu verwenden und eine Variable zu verwenden, anstatt i als Schleifenvariable (denn das ist ein MATLAB eingebaut für 0 + 1i). Sie können auch einen einzelnen linearen Index in AX anstelle von Zeilen- und Spaltenindizes verwenden.

for k = 1:numel(AX) 
    L = get(AX(k),'XLim'); 
    set(AX(k),'XTick',linspace(L(1),L(2),NumTicks)); 
end 

Wenn Sie diese witnout einer Schleife tun mögen, können Sie technisch tun es cellfun und unter Verwendung der Tatsache, dass Sie die gleiche Eigenschaft in mehreren Plotset können Objekte mit folgenden Syntax

set(array_of_plot_handles, {'Property'}, array_of_values_to_set) 

So für Ihr Problem angewendet, wäre es so etwas wie

% Get all XLims as a cell array 
oldlims = get(AX, 'XLim'); 

% Compute the new xlims 
newlims = cellfun(@(x)linspace(x(1), x(2), NumTicks), oldlims, 'UniformOutput', false); 

% Now set the values 
set(AX, {'XTick'}, newlims); 

sein Oder wenn Sie es wirklich wollen eine Zeile

sein 10
set(AX, {'XTick'}, cellfun(@(x)linspace(x(1),x(2),NumTicks), get(AX, 'Xlim'), 'UniformOutput', false)) 
+0

Die cellfun funktioniert wunderbar! In deinen Edits zu der ursprünglichen "for" -Schleife ist es immer noch nicht ganz richtig ... vielleicht, weil get (AX (i, i) ... muss aktualisiert werden? – user2860703

+0

@ user2860703 aktualisiert. – Suever

+0

Große umfassende Beispiele +1 – user2860703