2014-11-12 15 views
8

Ich versuche, ein Diagramm mit zwei verschiedenen Contourf-Subplots, die völlig andere Colormaps verwenden. Mit dem Code, den ich momentan habe (der eine benutzerdefinierte Colormap für einen der Subplots erstellt), kommen die Subplots jedoch mit der gleichen Colormap aus. Irgendwelche Ideen, wie das zu beheben ist?Subplots mit verschiedenen Colormaps Matlab

h = figure; 
subplot(2,1,1) 
title('GEFS 20 Member Mean Vorticity'); 
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]); 
%eqdcylin 
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2); 
hold on 
contourfm(gLat, gLon, squeeze(vmeanx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat; 
lm=worldlo('POline'); 
    for i=1:length(lm); 
    lm(i).otherproperty = {'color','m','LineWidth',1.5}; 
    end 
displaym(lm); 
gridm on; 
tightmap; 
set(h, 'Position', [1 1 2200 1100]); 
colormap(b2r(-5*10^-5, 5*10^-5)); 
freezeColors; 
cbfreeze(colorbar) 




%caxis([-5*10^-5 5*10^-5]) 

colorbar; 


subplot(2,1,2) 
title('GEFS 20 Member Vorticity Variance'); 
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]); 
%eqdcylin 
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2); 
hold on 
contourfm(gLat, gLon, squeeze(vvarx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat; 
lm=worldlo('POline'); 
    for i=1:length(lm); 
    lm(i).otherproperty = {'color','m','LineWidth',1.5}; 
    end 
displaym(lm); 
gridm on; 
tightmap; 
set(h, 'Position', [1 1 2200 1100]); 

mycmap = [ 
0.9961 0.9961 0.9961; 
0.6641 0.6641 0.9974; 
0.3320 0.3320 0.9987; 
    0   0 1.0000; 
    0 0.2500 1.0000; 
    0 0.5000 1.0000; 
    0 0.7500 1.0000; 
    0 1.0000 1.0000; 
0.2000 1.0000 0.8000; 
0.4000 1.0000 0.6000; 
0.6000 1.0000 0.4000; 
0.8000 1.0000 0.2000; 
1.0000 1.0000   0; 
1.0000 0.9333   0; 
1.0000 0.8667   0; 
1.0000 0.8000   0; 
1.0000 0.7333   0; 
1.0000 0.6667   0; 
1.0000 0.6000   0; 
1.0000 0.5333   0; 
1.0000 0.4667   0; 
1.0000 0.4000   0; 
1.0000 0.3333   0; 
1.0000 0.2667   0; 
1.0000 0.2000   0; 
1.0000 0.1333   0; 
1.0000 0.0667   0; 
1.0000   0   0; 
0.9854   0   0; 
0.9708   0   0; 
0.9561   0   0; 
0.9415   0   0; 
0.9269   0   0; 
0.9123   0   0; 
0.8977   0   0; 
0.8830   0   0; 
0.8684   0   0; 
0.8538   0   0; 
0.8392   0   0; 
0.8246   0   0; 
0.8099   0   0; 
0.7953   0   0; 
0.7807   0   0; 
0.7661   0   0; 
0.7515   0   0; 
0.7368   0   0; 
0.7222   0   0; 
0.7092   0   0; 
0.6961   0   0; 
0.6830   0   0; 
0.6699   0   0; 
0.6569   0   0; 
0.6438   0   0; 
0.6307   0   0; 
0.6176   0   0; 
0.6046   0   0; 
0.5915   0   0; 
0.5784   0   0; 
0.5654   0   0; 
0.5523   0   0; 
0.5392   0   0; 
0.5261   0   0; 
0.5131   0   0; 
0.5000   0   0; 
]; 

colormap(mycmap); 






freezeColors; 
cbfreeze(colorbar); 


set(gcf, 'renderer', 'zbuffer'); 
+0

nicht minimal noch reproduzierbar; Hast du die Beispiele in freezeColors durchgelesen? – Arpi

+0

Sicher, wie kann ich das minimal und reproduzierbar machen? – agold2121

+0

[This] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) ist verwandt mit R, aber ebenso gültig für Matlab und jede Programmierfrage. Eine Google-Suche würde Ihnen Hunderte von Treffern geben. Sehen Sie sich auch SO's [Hilfe] (http://stackoverflow.com/help/how-to-ask) an. – Arpi

Antwort

0

Wenn Sie das Image Processing Toolbox haben, können Sie die Funktion subimage verwenden, um Bilder mit ihren jeweiligen Farbtabellen anzuzeigen:

X1=imread('http://upload.wikimedia.org/wikipedia/commons/5/5c/Burosch_Blue-Only_Test_pattern.jpg'); 
X2=imread('http://upload.wikimedia.org/wikipedia/commons/e/ea/Romsey_River_Test.jpg'); 
subplot(1,2,1), subimage(X1) 
subplot(1,2,2), subimage(X2) 

Ergebnis:

two images in one figure

bearbeiten Es gibt eine vollständigere Antwort auf diese Frage here.

+0

Ich lade nicht in Bilder, ich berechne Konturfakturen. Würde das ähnlich funktionieren? – agold2121

+0

@ agold2121 Ich habe gerade festgestellt, dass es nur für Bilder (d. H. Matrizen) funktioniert, überprüfen Sie den Link für Möglichkeiten, um es mit Plots zu tun. –

+0

kein Glück, ich muss nur auf diese – agold2121

1

EDIT: es scheint, dass die Dokumentation falsch ist! Zeige Kommentare!

das zweite Argument der colormap Funktion Durch die Verwendung sollte man in der Lage sein, eine bestimmte colormap zu einem bestimmten (Teil-) Plot oder Achsen zuweisen, wenn Sie es so nennen wollen:

auf Bezug TMW: colormap:

Beachten Sie, dass das erste Argument ist der Griff zu den Achsen!

colormap(ax,map) 

setzt den colormap für die von ax angegebenen Achsen. Jede Achse innerhalb einer Figur kann eine eindeutige Colormap haben. Nachdem Sie eine Achsen-Colormap festgelegt haben, hat das Ändern der Abbildung colormap nicht Auswirkungen auf die Achsen.

Wie der Griff der Achsen ?:

erhalten, wenn sie mit Plot Plotten (x, y ..) Sie es als Rückgabewert erhalten. Fangen Sie mit:

ax = plot(x,y..) 

Für andere Plot-Funktionen, wie Sie scheinen, sollten Sie einige Informationen darüber in der Doku finden.

+0

das ist falsch. Die Frage bezieht sich auf mehrere Colormaps in einem Subplot. Das obige funktioniert nur, wenn jede Handlung in einer anderen Figur ist. Selbst wenn Sie das Achsen-Handle für ein einzelnes Teilplot erhalten, ändert das Setzen der Colormap die Colormap aller anderen Achsen in der Figur. – carandraug

+0

mein Gott, es scheint, dass Sie Recht haben. Ich habe gerade diese Form der Dokumentation. Habe ich das falsch verstanden? -> "Jede Achse in einer Figur kann eine eindeutige Colormap haben" oder stimmt etwas mit der Dokumentation nicht? : o –

+0

anscheinend ja. Es ist sehr einfach zu testen, 'data = randi (64, 10); hax1 = Nebenplot (1, 2, 1); Bild (Daten); Colormap (hax1, jet); hax2 = Subplot (1, 2, 2); Bild (Daten); colormap (hax2, hot); 'Mathworks Lösung dafür ist ein [absoluter Witz] (http://www.mathworks.com/matlabcentral/answers/101346-how-do-i-use-multiple-colormaps-in-a- - Einzelfigur). Sie müssen eine Colormap erstellen, bei der es sich um die Verkettung der einzelnen Unterplot-Colormaps handelt, und die Werte entsprechend anpassen. Und wenn Sie Farbbalken wünschen, müssen Sie ihre Bereiche auch manuell einstellen. – carandraug

0

Wenn Sie MATLAB 2017a aktualisieren, können Sie eine colormap zu jeder Achse zuweisen Objekt mit der Syntax colormap(axesHandle, cMap)

Verwandte Themen