2014-11-12 17 views
8

Próbuję zrobić wykres z dwoma różnymi subplots contourf, które używają zupełnie różnych map kolorów. Jednak z aktualnie posiadanym kodem (który tworzy niestandardową mapę kolorów dla jednego z subplotów), subploty są wyświetlane z tą samą mapą kolorów. Wszelkie pomysły, jak to naprawić?subplots z różnymi mapami kolorów 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

minimalnej ani nie powtarzalne; Czy przejrzałeś przykłady w freezeColors? – Arpi

+0

Jasne, jak mogę to uczynić minimalnym i powtarzalnym. – agold2121

+0

[This] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) jest związany z R, ale równie ważny dla Matlaba i dowolnego pytania programistycznego. Wyszukiwanie google dałoby setki hitów. Dodatkowo spójrz na SO [pomoc] (http://stackoverflow.com/help/how-to-ask). – Arpi

Odpowiedz

0

Jeśli masz przybornik przetwarzanie obrazu, można użyć funkcji subimage do wyświetlania obrazów z ich colormaps:

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) 

Wynik:

two images in one figure

Edit istnieje pełniejsza odpowiedź na to pytanie here.

+0

Nie ładuję obrazów, ale obliczam wykresy konturu. Czy to działa podobnie? – agold2121

+0

@ agold2121 Właśnie zdałem sobie sprawę, że działa tylko dla obrazów (tj. Matryc), sprawdź link, aby dowiedzieć się, jak to zrobić z wykresami. –

+0

bez powodzenia, może po prostu muszę zrezygnować z tej jednej – agold2121

1

EDYCJA: wydaje się, że dokumentacja jest nieprawidłowa! Zobacz komentarze!

Stosując drugi argument funkcji colormap, należy być w stanie przypisać konkretny colormap do konkretnej (pod) działki lub osie, jeśli chcesz to nazwać tak:

Odnosząc się do TMW: colormap:

Należy pamiętać, że pierwszy argument jest uchwytem do osi!

colormap(ax,map) 

ustawia colormap dla osi określonych przez siekiery. Każda oś w postaci może mieć unikalną mapę kolorów. Po ustawieniu mapy kolorów, zmiana mapy kolorów nie wpływa na osie.

Jak zdobyć uchwyt osi ?:

podczas drukowania z działki (x, y ..) można dostać go jako powrót wartości. Złap go:

ax = plot(x,y..) 

W przypadku innych funkcji fabuły, jak się wydaje, należy znaleźć informacje na ten temat w dokumentacji dokującej.

+0

to jest złe. Pytanie dotyczy wielu map kolorów na subpocie. Powyższe działa tylko wtedy, gdy każda działka ma inną postać. Nawet jeśli otrzymasz uchwyt osi dla pojedynczego wątku, ustawienie jego mapy kolorów spowoduje zmianę mapy kolorów wszystkich innych osi na rysunku. – carandraug

+0

rany, wydaje się, że masz rację. Właśnie dostałem ten formularz do dokumentacji. Czy zrobiłem to źle? -> "Każda osie wewnątrz figury mogą mieć unikalną mapę kolorów" lub czy coś jest nie tak z dokumentacją ...? : o –

+0

podobno tak. Bardzo łatwo przetestować, 'data = randi (64, 10); hax1 = subplot (1, 2, 1); obraz (dane); colormap (hax1, jet); hax2 = subplot (1, 2, 2); obraz (dane); colormap (hax2, hot); 'Rozwiązaniem Mathwork jest [absolutny żart] (http://www.mathworks.com/matlabcentral/answers/101346-how-do-i-use-multiple-colormaps-in-a -jedno-figura). Musisz utworzyć mapę kolorów, która jest połączeniem każdej mapy kolorów podrzędnej i odpowiednio dostosować wartości na każdym z nich. A jeśli chcesz mieć paski kolorów, musisz również ustawić ich zakresy ręcznie. – carandraug

0

przypadku uaktualnienia do MATLAB 2017a, można przypisać do każdego colormap osi obiektu przy użyciu składni colormap(axesHandle, cMap)

Powiązane problemy