كيفية رسم قطعة أرض ثلاثية الأبعاد في MATLAB؟

StackOverflow https://stackoverflow.com/questions/1809881

  •  05-07-2019
  •  | 
  •  

سؤال

لدي ثلاث معلمات x,y و t.لكن المشكلة هي بنية الملف الخاص بي.

تم تسمية ملفاتي على النحو التالي:

e_x_y.txt
t_x_y.txt

أين e_x_y.txt لديه خطأ لقيم معينة من x و y و t_x_y.txt لديه قيم الوقت المقابلة.

أحتاج إلى رسم القيم e_x_y.txt على x vs y vs t رسم بياني.

ما هي أفضل طريقة للقيام بذلك؟

أعرف قيمتي x وy، لذا لا يتعين علي خصمهما من أسماء الملفات.


ولتوضيح الأمور أكثر،

لنفترض أن ملفاتي هي:

e_4_5.txt
45
54
t_4_5.txt
2.0
6.0

e_7_8.txt
32
98
121
t_7_8.txt
2
9
1.0

أريد أن أرسم النقاط التالية:

(4,5,2.0) = 45
(4,5,6.0) = 54
(7,8,2.0) = 32 
(7,8,9.0) = 98
(7,8,1.0) = 121
هل كانت مفيدة؟

المحلول

قد يكون من الصعب تصور نوع الحبكة التي تحاول صنعها بشكل جيد.يمكنني أن أقدم لك اقتراحين:واحد هو ما أنت يريد, وواحد هو ما يجب عليك فعله بدلاً من ذلك ...

رسم البيانات رباعية الأبعاد:

للقيام بذلك، سيكون عليك رسم سلسلة من x,y,t النقاط وتمثل بطريقة أو بأخرى قيمة الخطأ e في كل نقطة.يمكنك القيام بذلك عن طريق تغيير لون أو حجم النقطة.في هذا المثال، سأرسم كرة عند كل نقطة بقطر يختلف بناءً على الخطأ (القطر 1 يساوي الحد الأقصى للخطأ المتوقع).اللون يمثل الوقت.سأستخدم نموذج البيانات الذي أضفته إلى السؤال (بتنسيق بتنسيق a 5 × 4 المصفوفة مع الأعمدة التي تحتوي على x, y, t, ، و e بيانات):

data = [4 5 2 45; 4 5 6 54; 7 8 2 32; 7 8 9 98; 7 8 1 121];
[x, y, z] = sphere;  % Coordinate data for sphere
MAX_ERROR = 121;     % Maximum expected error
for i = 1:size(data, 1)
  c = 0.5*data(i, 4)/MAX_ERROR;  % Scale factor for sphere
  X = x.*c+data(i, 1);           % New X coordinates for sphere
  Y = y.*c+data(i, 2);           % New Y coordinates for sphere
  Z = z.*c+data(i, 3);           % New Z coordinates for sphere
  surface(X, Y, Z, 'EdgeColor', 'none');  % Plot sphere
  hold on
end
grid on
axis equal
view(-27, 16);
xlabel('x');
ylabel('y');
zlabel('t');

وهذا ما سيبدو عليه الأمر:

enter image description here

المشكلة: على الرغم من أن الحبكة تبدو مثيرة للاهتمام، إلا أنها ليست بديهية للغاية.كما أن رسم الكثير من النقاط بهذه الطريقة سوف يصبح تشوشًا وسيكون من الصعب رؤيتها جميعًا بشكل جيد.

مؤامرة ثلاثية الأبعاد أكثر سهولة:

قد يكون من الأفضل بدلاً من ذلك عمل مخطط ثلاثي الأبعاد للبيانات، حيث قد يكون من الأسهل تفسيرها.هنا، يمثل المحور x رقم التكرار ويمثل المحور y كل شبكة على حدة:

plot3(1:2, [1 1], [2 45; 6 54]);           % Plot data for network 4-5
hold on
plot3(1:3, [2 2 2], [2 32; 9 98; 1 121]);  % Plot data for network 7-8
xlabel('iteration number');
set(gca, 'YTick', [1 2], 'YTickLabel', {'network 4-5', 'network 7-8'})
grid on
legend('time', 'error')
view(-18, 30)

وهذا ينتج مؤامرة أكثر وضوحا:

enter image description here

نصائح أخرى

على الرغم من أنني لست مقتنعًا بأن هذه هي أفضل طريقة لتصور البيانات، فإليك طريقة بسيطة للقيام بذلك كما طلبت.يمكنك رسم النقاط ثلاثية الأبعاد في مخطط مبعثر بسيط، وتعيين الحجم أو اللون إلى قيم البعد الرابع error.شيء مثل:

x = randi(20, [10 1]);
y = randi(20, [10 1]);
t = randi(10, [10 1]);
e = randi(200, [10 1]);

% map `e` to color
figure(1)
scatter3(x, y, t, 200, e, 'filled')
xlabel('x'), ylabel('y'), zlabel('t')
colormap(hot), colorbar

% map `e` to size
figure(2)
scatter3(x, y, t, e, 'filled')
xlabel('x'), ylabel('y'), zlabel('t')

color size

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top