2016-08-22 2 views
0

Ich habe 2 Arrays von Daten x und y beide sind 22250-by-54, und ich versuche, hist3 und imagesc zu verwenden, um Dichte-Plots für jedes x(:,n) und y(:,n) Paar, wo n = 1:54 zu machen.Matlab Hist3/imagesc Achsenskalierung

Ich verwende imagesc(values2) wo:

values2 = hist3([x(:) y(:)],[round(max(x)) round(max(y)) ]); 

als mein Argument zu verwenden, für jeden der 54 x und y Werte plotten einen einzigartigen Achsenbereich zu bekommen und es funktioniert gut. Wenn jedoch I ganzzahlige Werte für values2 wie

values2 = hist3([x(:) y(:)],[50 50 ]); 

die tatsächlichen Werte für jede der 54 Spalten von x und y Ende nach oben skaliert zu werden, um die [50 50] Parametern festen oder wenn ich [100 100 ] und es spiegelt nicht die tatsächlichen Werte für jede x und y wider. Wie kann ich die Achsenbereiche x,y fixieren und die tatsächlichen Werte im Bereich fester Achsen halten?

Ich habe auch versucht xlim und ylim in einem separaten Anruf nach dem Aufruf von imagesc(values2) verwenden und dies nicht funktioniert, entweder - es zeichnet meine Daten in einem sehr kleinen Bereich und läßt viele Leerraum um den Bildbereich.

Vielen Dank für Ihre Hilfe !!

Ich habe die „geprüft“ Antwort von dem Link unten versucht zu bekommen, wo ich jetzt bin: Scatter plot with density in Matlab

+0

Die x-Achse und y-Achsen-Werte oder ein Bereich von Daten nicht gleich sind. Die Variable x ist die Windgeschwindigkeit und die Variable y ist die Temperatur. Vielen Dank, – user2100039

+0

Ein erwarteter Bereich für die x-Variable könnte 0 bis 30 (Windgeschwindigkeit) sein und der erwartete y-Variablenbereich für die Temperatur, um alle 54 Fälle einzuschließen, könnte -20 bis +40 sein. Vielen Dank. – user2100039

+0

Hi - ja, das funktioniert genauso wie mein aktueller Code. Die X- und Y-Achsenbereiche ändern sich mit jeder neuen Darstellung. Das ist nicht was ich brauche. Ich möchte die Verteilung der Daten mit dem gleichen oder festen x- und y-Achsenbereich für jeden obigen Fall für n vergleichen, wobei n = 1: 54 ist. Vielen Dank! – user2100039

Antwort

0

die Verwendung answer you referenced können Sie schreiben:

% some arbitrary data: 
x = randi(30,30,54); 
y = randi(61,30,54)-21; 

% constant values for every n: 
nbins = [round(range(y(:))) round(range(x(:)))]+1; 
x_lim = [min(x(:)) max(x(:))]; 
y_lim = [min(y(:)) max(y(:))]; 

% plotting: 
for n = 1:9 
    [values2, centers] = hist3([x(:,n) y(:,n)],nbins); 
    subplot(3,3,n) % this is just for compact demonstration 
    h = imagesc(centers{:},values2.'); 
    title(num2str(n)) 
    xlim(x_lim) % keeping the x-axis limits constant 
    ylim(y_lim) % keeping the y-axis limits constant 
    axis xy 
end 

Beachten Sie, dass Sie mit bekommen kann Bereiche für Ihre Diagramme, wie in diesem Beispiel, wenn die Daten in x(:,n) oder y(:,n) einen kleineren Bereich als y(:) und x(:,n) hat.

welche geben werden: imagesc hist

+0

Ich habe deine Lösung ausprobiert. erste Handlung ist in Ordnung. Zweites Plot in der Schleife oder wenn n == 2, bekomme ich einen Fehler auf der Variablen values2 "Index überschreitet Matrixdimensionen". Ihre Gedanken? Außerdem sind die Achsenbeschriftungen oder die X- und Y-Tick-Beschriftungen in Dezimalform und nicht in ganzen Zahlen. Danke, – user2100039

+0

Ich führe dies in einer Schleife ohne Fehler, können Sie die Zeile kopieren, die den Fehler macht? wie für die Etiketten, kann dies mit 'sprintf' bearbeitet werden Ich würde es zur Antwort hinzufügen, aber ich bin mir nicht sicher, was Sie sehen möchten – EBH

+0

values2 = hist3 ([y (:, n) x (:, n) ], [rund (Bereich (y (:, n))) rund (Bereich (x (:, n)))]); – user2100039