關於Matlab作圖的若干問題


      看到了北京一則新聞,想到如何測試雙向鏡子?百度之。

       image

      只要做以下簡單的測試:把你的指甲尖放在鏡子表面,如果在指甲尖與倒映圖像之間有間隙,那就是真的鏡子。然而,如果你的指甲尖能直接碰觸到指甲反射影像,當心!那就是雙向鏡了!

一、matlab里如何顯示點的坐標?

  • 在圖里顯示點坐標

         alt

      工具欄中有一個 "Data Cursor"按鈕,點擊之,箭頭變成小十字,點要顯示坐標的位置,就出來了。

  • 采用字符串函數處理

        image

  1: x=1+4*rand(1,5);
  2: y=2+2*rand(1,5);
  3: plot(x,y,'o-')
  4: %text(x,y,s)就是在點(x,y)處顯示字符串s、
  5: for i=1:length(x)
  6:     text(x(i),y(i),['(',num2str(x(i)),',',num2str(y(i)),')'])
  7: %在(x,y)的每一點處添加文字,文字內容為(x,y)
  8: %其中每一點的x,y用num2str把數字轉化成字符串
  9: end

      還可以這么寫。

  1: x=1+4*rand(1,5);
  2: y=2+2*rand(1,5);
  3: plot(x,y,'o-')
  4: for i=1:length(x)
  5: str1 =strcat(strcat('(',num2str(x(i))),',');
  6: str2 = strcat(num2str(y(i)),')');
  7: text(x(i),y(i),strcat(str1,str2))
  8: %在(x,y)的每一點處添加文字,文字內容為(x,y)
  9: %其中每一點的x,y用num2str把數字轉化成字符串
 10: end

      還是第一個的好,因為他知道字符串的多種連接方式(text(x,y,s)就是在點(x,y)處顯示字符串s)。

二、字符串連接

  • 用中括號將str1和str2像矩陣元素一樣包含起來
  1: >> str1='ILoveYou';
  2: >> str2='Matlab';
  3: >> [str1,str2]
  4: ans =
  5: ILoveYouMatlab

      若想驗證str1和str2確實被連接起來,可調用length函數測試生成字符串的長度。

  • 用strcat函數連接
  1: >> strcat(str1,str2)
  2: ans =
  3: ILoveYouMatlab

      或者采用下面的方式。

  1: strcat({'Red','Yellow'},{'Green','Blue'})
  2: ans = 
  3:     'RedGreen'    'YellowBlue'
  4: >> {'Red','Yellow'}
  5: ans = 
  6:     'Red'    'Yellow'

      下面就不一樣了。

  1: >> strcat(['Red','Yellow'],['Green','Blue'])
  2: ans =
  3: RedYellowGreenBlue
      可以看出這和plot([],[])的參數位置不一樣。
  • 利用sprintf函數
  1: >> number=123;
  2: >> sprintf('%s%d','Fuck',number)
  3: ans =
  4: Fuck123

      利用class(ans)可以知道Fuck123的類型為char。

三、中括號與大括號區別

      大括號用於元胞數組,不明白,暫且不管,沒找到資料。

四、散點圖

      plot([x1,x2],[y1,y2])這樣就懂了吧,看參數的意思,試驗出來的。

      散點圖除了scatter函數外,還有stem函數可以使用,其他的沒查。

  1: >> y=x.^2;
  2: >> stem(x,y,'fill');
  3: >> title('y=x^2散點圖');

      image

五、圖的說明

      下面在同一坐標內,分別用不同線型和顏色繪制曲線y1=0.2e-0.5xcos(4πx) 和y2=2e-0.5xcos(πx),標記兩曲線交叉點。

      image

  1: figure(1);%參數必須是整數標量,所以必須采用set來設置標題欄“復雜的函數”
  2: %注意觀察和titile的區別
  3: set(gcf,'Name','復雜的函數');
  4: title('復雜地函數');
  5: %如果用axis初始化坐標范圍,那么會提示沒有初始化x,所以先其他方法初始化x,axis必須放在plot后
  6: %而且如果用axis已經生成的圖片可能偏上或者偏下,所以axis不常用來設置坐標范圍,只設置x就行了
  7: x=linspace(0,2*pi,1000);%xlim([0,2*pi])
  8: xlabel('x軸(m)');
  9: ylabel('y軸(m)');
 10: y1=0.2*exp(-0.5*x).*cos(4*pi*x);
 11: y2=2*exp(-0.5*x).*cos(pi*x);
 12: k=find(abs(y1-y2)<1e-2);   
 13: %查找y1與y2相等點(近似相等)的下標
 14: x1=x(k); %取y1與y2相等點的x坐標
 15: y3=0.2*exp(-0.5*x1).*cos(4*pi*x1);   
 16:  %求y1與y2值相等點的y坐標
 17:  plot(x,y1,'b',x,y2,'r');
 18:  hold on
 19:  scatter(x1,y3);
 20:  legend('A曲線','B曲線','C曲線');%不能再加上C曲線,因為scatter和plot不屬於同一個體系,會提示“未定義函數或變量 'x'”
 21:  %plot(x,y1,x,y2,'k:',x1,y3,'bp');這個也可以標記出來點,如果不加p,那么低三個曲線就是折線圖,不過沒查到p啥意思
 22:  %不知道也沒關系,會用替代方案也好
 23:  %axis([0 2*pi -1 5]);%注意里面還有中括號,否則一直提示"不是MATLAB表達式"
 24:  grid on

      圖名標注可用:title('xx關系圖')和set(gcf,'Name','圖片1')不一樣,set設置的是圖片標題欄,而前者設置顯示在圖片中心區域axis([0,22,0,3]);---顯示范圍為:X軸從0-22, Y軸從0-3顯示。xlabel('電壓(V)'),ylabel('電流(A)') 分別表示在X軸下標示電壓(V),Y軸旁標示“電流(A)”

legend('A曲線 ','B曲線','C曲線')  用於說明圖中的曲線的說明,順序和plot(x1,y1,x2,y2,x3,y3)的曲線1、2、3相同即可。

      問題來了,如何控制y軸顯示精度(x軸用linspace第三個參數表示共幾個,實際就內涵了精度,或者x=1:1:10,那么精度是1),y軸不能用x那樣,就怕圖形偏上偏下,所以我想的方法是先繪制一下,確定y軸范圍比如1到6,那么再次加上y=1:0.5:6,這樣就不怕偏上偏下,而且精度0.5。學習還是想一些簡單的方法吧,不要遇到問題就想去找函數,個人感想而已。

六、繪制光滑曲線

       對於離散坐標點,scatter划散點圖,plot划折線圖,那么問題來了,如何讓折線圖平滑?

      參考http://philotack.blog.163.com/blog/static/37473423201010910230221/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM