Menggantikan Plot Scatter3 dengan Mesh Plot atau Surface Plot

Menggantikan Plot Scatter3 dengan Mesh Plot atau Surface Plot

Saya memiliki koordinat titik (x, y, z) dan nilai intensitas (c) di masing-masing titik. Saat ini saya memiliki plot scatter untuk hal itu, tapi saya ingin mengubahnya menjadi plot mesh atau surface untuk memvisualisasikan tren lebih baik dan mengawetkan skala warna untuk nilai intensitas. Apapun bantuan yang Anda berikan!

Menggantikan Plot Scatter3 dengan Mesh Plot

Saya telah mencoba menggunakan fungsi meshgrid untuk membuat grid 2D, lalu menggunakan fungsi sqrt dan lain-lain untuk menghitung nilai z dan x. Namun, saya ingin mengetahui apakah ada cara yang lebih mudah untuk menggantikan plot scatter3 dengan plot mesh.

Berikut adalah contoh kode yang saya gunakan:

[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

X = X(:);
Y = Y(:);
Z = Z(:);

scatter3(X,Y,Z)

Namun, saya mendapatkan error bahwa scatter3 memerlukan vektor, tidak matriks. Oleh karena itu, saya harus menggunakan fungsi plot3 dengan simbol 'o' untuk mendapat hasil yang mirip.

Menggantikan Plot Scatter3 dengan Surface Plot

Saya juga ingin mengubah plot scatter menjadi plot surface. Berikut adalah contoh kode yang saya gunakan:

[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;

surf(X,Y,Z,'FaceAlpha',0.2,'EdgeAlpha',0.0,'FaceColor',[1 0 0])

Namun, saya masih memiliki pertanyaan lain tentang bagaimana cara menggantikan plot scatter3 dengan plot surface yang lebih baik.

Mengoptimalkan Kinerja Komputasi

Saya juga ingin mengetahui apakah fungsi reshape lebih cepat atau tidak dalam hal kinerja komputasi. Setelah melakukan pengujian, saya menemukan bahwa fungsi : (colon) lebih cepat.

Berikut adalah contoh kode yang saya gunakan untuk menguji kinerja:

sizes = linspace(100,10000,100);

time_reshape = [];
time_col = [];

for i=1:length(sizes)
 X = rand(sizes(i)); % Create random squared matrix

 r = @() ResFcn(X); 
 c = @() ColFcn(X);

 time_reshape = [time_reshape timeit(r)/1000] % Take average of 1000 measurements
 time_col = [time_col timeit(c)/1000] % Take average of 1000 measurements
end

figure()
hold on
grid on
plot(sizes(2:end), time_col(2:end))
plot(sizes(2:end), time_reshape(2:end))
legend("Colon","Reshape","Location","northwest")
title("Comparison: Reshape vs. Colon Method")
xlabel("Length of squared matrix")
ylabel("Average execution time [s]")
hold off

Dengan demikian, saya berharap bahwa artikel ini akan membantu orang lain yang mengalami masalah serupa dengan saya.