2012-03-31 11 views
7

Potrzebuję wykonać powierzchnię 3D, gdzie kolor będzie reprezentował czwartą zmienną. Wiem, że "surfowanie" jest PODOBNE do tego, czego potrzebuję, ale to jeszcze nie wszystko. Zasadniczo mają następujące zmienne:MATLAB: Potrzeba zrobienia wykresu 4D (3D + kolor/kolor)

t = [1 M]

Y = [1 n]

a = [1: O]

powinny to być trzy Kartezjańskie topory korodujące.

Mam również zmienną S, która ma wymiary m x n x o i jest w zasadzie amplitudą, funkcją poprzednich trzech zmiennych (tj. S = f (t, y, a)). Chcę, żeby to było reprezentowane przez kolor.

Podsumowując, potrzebuję wykresu formy (t, y, a, S), gdzie pierwsze trzy zmienne są wektorami o nierównych rozmiarach, a zmienna końcowa jest wielowymiarową tablicą, której wymiary są określone przez pierwsze trzy.

Z góry dziękuję.

+0

co pan skończyć się robi? Juk rozwiązać swój problem? Nie zapomnij wybrać odpowiedzi :) –

Odpowiedz

1

Zawsze używałam scatter3 do kolorowania/wymiarowania pikseli w przestrzeni 3d. Wydaje mi się, że podpis jest:

scatter3(x,y,z, size, color) 

Rozmiar i kolor mogą być skalarne lub wektorowe o długości równej współrzędnym. Zwykle używam koloru lub rozmiaru, aby odzwierciedlić czwarty atrybut, w zależności od tego, co pokazuję. Nie mam Matlab na tej maszynie, więc wybacz mi, jeśli moja pamięć nie jest całkowicie dokładna na temat użycia. "help scatter3" powinien opisać to znacznie lepiej.

+0

Dzięki, zasugerowałem to również na forach MATLAB. Przyjrzę się temu. Jednak w moim przypadku, co zrobiłbym ze zmienną wielkości? Tego się nie martwię, ale jestem zainteresowany pozostałymi czwórkami. – Mike

+0

Mam zestaw sygnałów w dziedzinie czasu, które są oddzielone w przestrzeni i wziąłem ich ciągłej transformacji falkowej, aby uzyskać skalogram. Zatem mam trzy zmienne jako osie: czas (t), przestrzeń (x) i skale/częstotliwość (a), a także sam faktyczny skalogram - lub raczej zestaw skalogramów dla każdego z różnych obszarów przestrzennych. oddzielone sygnały. czasu ma długość 76050 skale ma długość 32 przestrzeń ma długość 4 Zatem zestaw scalograms jest wielowymiarową macierz o długości 32x76050x4 z rzeczywistych wartości wewnątrz reprezentujący amplitudę. To dość mylące. – Mike

+0

Po prostu pomyślałem o jakimś pomyśle. Co się stanie, jeśli zmienię odpowiednio zmienne, aby ich rozmiary pasowały do ​​funkcji takich jak surfowanie lub scatter3D? Obecnie zmienne mają postać 32x76050x4. Korzystając z linspace lub czegoś podobnego, powinienem umówić się z tymi facetami. Pozwól mi spróbować. – Mike

10

SCATTER3 wymaga x, y i z i innej grupy argumenty są tej samej wielkości wektorów nx1 dla jednej serii i matryc NxM dla serii M.

Masz pełne dane przestrzenne 3D. Aby równo wielkości współrzędnych wektorów użyć MESHGRID (lub NDGRID) Funkcja:

[X, Y, Z] = meshgrid(t, y, a); 

Następnie można użyć SCATTER3:

scatter3(X(:), Y(:), Z(:), [], S(:)) 

Problemem jest to, ponieważ jest to pełny scatter3 dane miejsce nie będzie pomocne szczególnie jeśli masz dużo punktów.

Prawdopodobnie możesz filtrować zmienną S (coś podobnego do idx = S > 0), a następnie możesz wykreślić filtrowane dane.

Jeśli naprawdę potrzebujesz wizualizować wszystkie dane, spójrz na Volume visualization w dokumentacji MATLAB. Mogę na przykład polecić funkcję SLICE.

EDIT

Oto przykład pełnej 3D wykresu przestrzeni rozproszenia drobnych wektorów (m, n, o równej 5) S = rand([m,n,o]); scatter3(X(:), Y(:), Z(:), [], S(:), 'filled')

scatter example

EDIT 2

Od twoich komentarzy t o druga odpowiedź znalazłem, że macie matrycę 32x76050x4. W rzeczywistości możesz wycinać plaster 2D po jednym na raz. możesz to zrobić w 2D z funkcją IMAGESC lub w 3D z funkcją SLICE.

Spróbuj:

imagesc(S(:,:,k)) 

gdzie k oznacza liczbę od 1 do 4 w 3. wymiarze.

Lub spróbuj

slice(S, [], [], 1:size(S,3)) 
shading flat 

slice example

+0

Dziękuję, spróbuję tego! Zaktualizuję cię, gdy dostanę wyniki! = D – Mike

+0

Czy możesz opublikować zrzut ekranu z tego, jak to wygląda, jeśli to możliwe? Jestem ciekawy. Dzięki! – rutgersmike

+0

Zrzut ekranu z czym? wykres punktowy? Pamiętaj, że to pełna przestrzeń, więc nie ma to większego sensu, chyba że odfiltrujesz dane. Mogę to pokazać dla małych wektorów. – yuk

Powiązane problemy