2015-03-11 5 views
7

Skrócona wersjaJak ustawić wartości xiy podczas korzystania z bar3 w programie Matlab?

Jak mogę kontrolować X i Y wartości dla 3-d bar działki w Matlab?

Szczegóły

Say mamy macierz 10 x 20 danych i wykreślić go za pomocą bar3 i chcemy ustawić X i Y wartości. Na przykład:

foodat = rand(10,20); 
xVals = [5:14]; 
yVals = [-3:16]; 
bar3(xVals, foodat); 
xlabel('x'); ylabel('y'); 

Czy istnieje sposób, aby nakarmić je również? W przeciwnym razie osie y zawsze domyślnie przyjmują wartość [1: N].

Uwaga Nie chcę tylko zmieniać etykiet przy użyciu XTickLabel i YTickLabel. Muszę zmienić rzeczywiste wartości na osiach, ponieważ spiskuję wiele rzeczy na tej samej figurze. Nie wystarczy zmienić sposób oznaczania (niewłaściwych) znaczników osi. Więc ta różni się od zagadnień tak:

How can I adjust 3-D bar grouping and y-axis labeling in MATLAB?

Inne rzeczy próbowałem

Przy próbie zmiany xvals z:

set(gca,'XTick', xVals) 
set(gca,'YTick', yVals) 

Wartości są podejmowane w, ale faktycznie pokazują się na niewłaściwych osiach, więc wydaje się, że osie x i y są przełączane za pomocą bar3. Poza tym i tak jest już za późno, ponieważ wykres słupkowy został już wykreślony z błędnymi wartościami x i y, więc w efekcie damy tiki do pustych wartości.

Uwaga dodany

Matlab wsparcie techniczne po prostu e-maila do mnie, aby dać mi znać o użytkowniku przyczyniły funkcję scatterbar3, który robi to, co chcę, w inny sposób niż zaakceptowanej odpowiedzi:

http://www.mathworks.com/matlabcentral/fileexchange/1420-scatterbar3

+0

Domyślam się, że jeśli masz zamiar spisać wiele rzeczy razem, to OK, aby mieć puste wartości '1: 4'. Właściwie możesz wywołać oś ([xmin xmax ymin ymax zmin zmax]), aby cahgne wykreślić zakres. –

+0

Tak, żałuję, że to nie był główny problem! – neuronet

+0

hum? czy możesz zamieścić kilka zdjęć tego, co masz/czego chcesz? Być może źle zrozumiałem twój problem. –

Odpowiedz

3

Znalazłem sposób na zrobienie tego. Ill daje kawałek kodu, a następnie będziesz musiał „posprzątać”, głównie limity osi i Xticks, jak bar3 ma założyć, że Xticks wewnątrz, więc jeśli chcesz, aby inni musisz ustawić je ręcznie samemu .

Więc tutaj jest trick aby uzyskać xdata z uchwytu bar3. Chodzi o to, że wydaje się, że istnieje uchwyt dla każdego wiersza danych, więc musisz powtórzyć dla każdego z nich. Oto kod z wyjściem prądowym:

foodat = rand(20,10); 
xVals = [5:14]; 
yVals = [-3:16]; 


% The values of Y are OK if called like this. 
subplot(121) 
bar3(yVals, foodat); 

subplot(122) 
h=bar3(yVals, foodat); 
Xdat=get(h,'XData'); 
axis tight 
% Widdth of barplots is 0.8 
for ii=1:length(Xdat) 
    Xdat{ii}=Xdat{ii}+(min(xVals(:))-1)*ones(size(Xdat{ii})); 
    set(h(ii),'XData',Xdat{ii}); 
end 



axis([(min(xVals(:))-0.5) (max(xVals(:))+0.5) min(yVals(:))-0.5, max(yVals(:))+0.5]) 

enter image description here

Uwaga: Y wygląda inaczej, ale nie jest.

Jak widać teraz wartości X są te chciałeś. Jeśli chcesz, aby w międzyczasie był inny rozmiar niż 1, musisz zmienić kod, ale możesz zgadnąć, jak prawdopodobnie!

+1

To działa! Znakomita sztuczka. Uwaga do naprawienia tyknięć x (obecnie pokazuje tylko 5-10), po prostu dodaj 'set (gca, 'XTick', xVals)' – neuronet

+0

@neuronet dokładnie. Po prostu nie chciałem dać ci wszystkiego: P –

Powiązane problemy