שאלת מאטלב

אחמס1

New member
שאלת מאטלב

נתונים לי שלושה מערכים חד-מימדיים. לאחד קוראים x והוא מכיל קואורדינטת x, לשני קוראים y, והשלישי מכיל איזשהו פרמטר p. אני רוצה לצייר מפה מכל שלשה, כך ש-p יקבע את הצבע. בדרך כלל הייתי משתמש ב-contourf, אבל הבעיה היא שמדובר בנקודות (x,y) שמפוזרות באופן אקראי על המישור, כך שאי אפשר פשוט ליצור מהן מטריצה עם meshgrid (וגם סתם הכנסת הערכים למטריצה נותנת תוצאה מזוויעה). איך אפשר לעשות זאת? תודה.
 

avinamal

New member
אפשר עם scatter או plot

אתה מתכנן על גרף דו מימדי, כך ש"מימד הגובה" יומר ב"מימד צבע". הוקטורים x,y הינם רק אינדקסים. פקודת plot למשל יכולה לקבל וקטור של N X 3 שכל שלשה בו מציינת צבע בייצוג RGB. הערכים צריכים להיות מנורמלים בין 0 ל 1. למשל:
pcolor = ( p - min(p) ) / ( max(p) - min(p) ); figure, plot( X , Y , repmat( pcolor , [1 3] ) );​
אופציה יותר "נכונה": המר את הרשימה הזו למטריצה שכל הכניסות ה"לא מצויינות" שלה הן אפס ע"י פקודות full, sparse. לאחר מכן הצג בפקודות הרגילות image, imview, imagesc וכולו.
 

אחמס1

New member
תודה, הסתדרתי

מסתבר שבמקרים כאלה מומלץ להשתמש ב-griddata שייצור מטריצה של קואורדינטות, ויעשה אינטרפולציה למידע באותן נקודות חסרות. <למה מערכת הפורומים האינטליגנטית הזאת מחכה שכל הקובץ עולה ורק אז נזכרת להודיע שאי אפשר לשלוח הודעות עם קובץ?> http://img291.imageshack.us/img291/3839/screenshot1un1.png ואם מישהו מעוניין לדעת מה זה... אז גם אני, רק אמרו לי לצייר. כנראה שזה גז בינכוכבי או משהו.
 

avinamal

New member
תשובה יותר לעניין, בעיקר אתה עובד על 7

השתמש ב scatter, הוא מפרש וקטור שלישי כ"וקטור צבע". זה עובד ככה:
scatter( 'X coordinate' , Y coordinate' , 'pointsize vector' , 'color vector'); 'pointsize vector' , 'color vector' can be either ommited (default values are 9 and blue), or stated as a scalar, or as vectors on the length of X and Y. *** example *** >> X = randn(1,1000)/7 + 2; ................% X values >> Y = randn(1,1000); ................% Y values >> Z = X.^2 + Y.^2; .................% color vector >> M = minmax(Z) ..................% We normalize Z to the range [0 1] >> Z = ( Z - M(1) ) / ( M(2) - M(1) ) ................% M(1) = min(Z) , M(2) = max(Z) >> figure, scatter(X , Y ,5, Z), grid .........% 5 is the size value - if you ommit it Z will be interprated as size vector < figure attached >​
 

אחמס1

New member
תודה רבה, אני אזכור את השיטה הזאת להבא

אף על פי שכמו שכתבתי למעלה יותר, במקרה הזה (כשהמידע הוא לא באמת דיסקרטי אבל יש רק נתונים מפוזרים), עדיף להשתמש ב-griddata.
 
למעלה