MATLAB基礎教程-臺大郭彥甫-學習筆記6

2021-02-07 成長ing日記


today:
1.basic plotting
2.graphical objects properties

basics

matlab has a powerful plotting engine that can generate a wide variety of plots

plot from 『『data』』

1.matlab does not understand functions f(t)=sin(2pit)
2.strategies:
generate the numetic values
data point

function

plot()

plot(x,y) plots each vector pairs(x , y)



matlab會 refresh ,把之前的圖給清掉,如果 想保留,用 指令 hold on

下面是sin和cos的圖像

plot(cos(0:pi/20:2*pi));hold on plot(sin(0:pi/20:2*pi));

plot style

plot(x,y,『str』)plots each vector pairs(x,y ) using the format defined in str (check linespec)

畫 marker
如果想要sin函數 用圈圈,顯示紅色 需要這樣添加

plot(sin(0:pi/20:2*pi),'or');

o表示circle圈圈,r表示red紅色
如果想要cos函數用叉叉,綠色。則如下:xg

plot(cos(0:pi/20:2*pi),'xg');

legend()函數

add legend to graph 添加圖標 legend(『L1』,『L2』,『L3』…)
position adjustment

畫圖:

x=0:0.5:4*pi;y=sin(x); h=cos(x); w=1./(1+exp(-x));g=(1/(2*pi*2)^0.5).*exp((-1.*(x-2*pi).^2)./(2*2^2));plot(x,y,'bd-',x,h,'gp:',x,w,'ro-',x,g,'c^-');

分析:4個函數,用一個plot畫出來。
'bd-'表示:blue diomond solid line 意思是藍色的,鑽石(稜形)的,實線
'gp:'表示:green five-point star dotted line 意思是 綠色的五角星表示的點線
'ro-'表示:red circle solid line 紅色的圓圈的實線
'c^-'表示:cyan up triangle solid line 青色,上三角,實線
沒有legend的時候 ,

現在為了區分這四個函數,需要添加legend圖標

legend('sin(x)','cos(x)','Sigmoid','Causs function');

效果圖:

title() and lable()

title()

xlable()

ylable()

zlable()

例程:

x=0:0.1:2*pi; y1=sin(x); y2=exp(-x);%兩個函數plot(x,y1,'--*',x,y2,':o');%畫圖xlabel('t=0 to 2\pi');%x軸ylabel('values of sin(x) and e^{-x}');%y軸title('Function plots if sin(x) and e^{-x}');%標題legend('sin(x)','e^{-x}');%曲線圖標

效果:
注意:反斜槓\ +pi 這樣顯示的話 直接是Π ,在字符串裡面

text() and annotation()

問題:積分符號怎麼顯示呢?
text with mathematical expression using Latex
這個積分符號是用text()函數寫的 ,text函數前兩個參數是坐標,畫在哪兒。第三個參數是 積分 這個變量str,後面是一個插值
slash 反斜槓 \int 是∫符號
積分的表示:

str=' $$ \int_ {0}^{2} x^2\sin(x) dx$$';

前後都有兩個$$,然後是積分符號,\int_ 然後是上下限 {0}^{2},之後就是一個被積函數 x^2\sin(x) dx
箭頭使用annotation 畫的 ,arrow, X的位置變化 ,Y的位置變化
代碼:

x=linspace(0,3); y=x.^2.*sin(x);plot(x,y);line([2,2],[0,2^2*sin(2)]);str=' $$ \int_ {0}^{2} x^2\sin(x) dx$$';text(0.25,2.5,str,'Interpreter','latex');annotation('arrow','x',[0.32,0.5],'y',[0.6,0.4]);

效果圖;積分的顯示

作業題:

我的練習代碼:

t=1:0.01:2;f=t.*t;g=sin(2*pi*t);%畫圖plot(t,f,'k-',t,g,'or');%坐標軸和標題xlabel('Time (ms)');ylabel('f(t)');title('Mini Assignment #1');%標註函數legend('t^2','sin(2\pit)');

效果圖:

[總結】以上記錄了基本的繪圖知識。主要是text()函數顯示積分,還有一些畫線的style風格。


figure adjustment圖形調整

1.several properties:
font字體
font size 字體大小
line width
axis limit
tick position刻度位置
tick label 刻度

graphical objects繪圖物件

1.a figure is composed of many objects
figure object 整個圖像 \ axes object坐標系統 \ line object線條

這幾點的關係:
hierarchy ,parent關係,繼承關係
圖上有坐標軸系,坐標軸系上有line、text、surface等等。

例程:會看到一張圖

 x=linspace(0,2*pi,1000);y=sin(x);plot(x,y);set(gcf,'Color',[1 1 1]);

下面說一下繪圖物件的屬性

figure properties 圖像屬性

以上面例程為例
1.繪製圖像出來之後,點擊編輯,彈出,點擊查看當前對象屬性


2.彈出的物件屬性如下圖所示

3.為了了解更多一點 圖形的屬性,我們點擊 更多屬性。這裡屬性更加豐富,可以查看我們繪製的圖 line object 還有 點擊 坐標軸, 就會顯示axes的屬性信息。

所以說,matlab對圖形很nice

知道了繪圖物件的屬性,接下來就要去修改屬性

modifying properties of an object修改屬性


strtegy:
1.identify the』handle』 of an object ,handle is like its ID number
2fetch or modify the object’s properties

1. identifying the handle of an object物件的辨識碼

第一種方法
upon creation: h=plot(x,y);物件的標識碼給h,這是一個數

這種方法,使用 的時候需要找到 utility functions

gca 表示的是坐標軸的handle,gcf是整個圖figure這一層的handle

第二種方法是get()函數

getting object properties

getting properties of a graphical object:get()
執行下面代碼,看看是什麼情況

x=linspace(0,2*pi,1000);y=sin(x); plot(x,y);h=plot(x,y); get(h)

執行完,matlab會回傳很多東西

AlignVertexCenters: 'off'            Annotation: [1×1 matlab.graphics.eventdata.Annotation]          BeingDeleted: 'off'            BusyAction: 'queue'         ButtonDownFcn: ''              Children: [0×0 GraphicsPlaceholder]              Clipping: 'on'                 Color: [0 0.4470 0.7410]%顏色             CreateFcn: ''             DeleteFcn: ''           DisplayName: ''      HandleVisibility: 'on'               HitTest: 'on'         Interruptible: 'on'              LineJoin: 'round'             LineStyle: '-'  %線是solid line 實線             LineWidth: 0.5000%線寬也給出                Marker: 'none'       MarkerEdgeColor: 'auto'       MarkerFaceColor: 'none'         MarkerIndices: [1×1000 uint64]            MarkerSize: 6                Parent: [1×1 Axes]         PickableParts: 'visible'              Selected: 'off'    SelectionHighlight: 'on'                   Tag: ''                  Type: 'line'         UIContextMenu: [0×0 GraphicsPlaceholder]              UserData: []               Visible: 'on'                 XData: [1×1000 double]             XDataMode: 'manual'           XDataSource: ''                 YData: [1×1000 double]           YDataSource: ''                 ZData: [1×0 double]           ZDataSource: ''

h是畫的sin()函數 的handle信息

再來執行

gca:handle of axis
效果:也會顯示axis的詳細信息

2.modify properties修改屬性

fetching or modifying properties
to fetch properties ,use
get()
to modify properties ,use
set()

然後,下一個問題,如果我們想要修改 x-axis的limits ,即修改x軸的範圍和起止點

設定axis 的limits
setting axes limits
代碼code:

set(gca,'XLim',[0,2*pi]);set(gca,'YLim',[-1.2,1.2]);

解釋:第一個參數是handle,表示是哪一個物件,是軸,還是線。第二個參數是 那一部分;第三個參數是改成什麼。
第一句是把x軸改成0到2pi

還有兩個指令達到同樣的效果,但是呢,上面兩個指令對理解matlab中handle的原理和運作方式有幫助
alternative:

xlim([0,2*pi]);ylim([-1.2,1.2])

上面我們已經會修改坐標軸的範圍limits,下面我們修改字體和 坐標軸的刻度
setting font and tick of axes


修改字體後

問題:在畫三角函數的時候,我們希望坐標軸tick與pi有關
代碼:

set(gca,'xtick',0:pi/2:2*pi);set(gca,'xticklabel',0:90:360);

把坐標軸變成0到2pi,中間間隔是pi/2.執行完第一行代碼,雖然變成了與pi相關,但是現實出來還是小數
執行完第二行代碼,顯示的是0到2pi,對應的角度值

這個離pi還是不對,接下來就是正式變成pi的過程
需要把font變成symbol ,在symbol中p表示pi
代碼:

set(gca,『FontName』,『symbol』);set(gca,『xticklabel』,{『0』,『p/2』,『p』,『3p/2』,『2p』});

執行這兩行代碼,matlab顯示警告,

現在matlab不再支持symbol字體,


那matlab如何在坐標軸上顯示希臘字母pi呢?

第一,將這些位置指定為一個由遞增值組成的向量。這些值無需等距。
第二,還要更改關聯的標籤。並用一個字符向量元胞數組來指定刻度標籤。要在標籤中包含特殊字符或希臘字母 , 可使用 TeX 標記,例如用 \pi 表示pi 符號。

xticks([0,pi/2,pi,3*pi/2,2*pi]);    %位置指定為向量xticklabels({'0','\pi/2','\pi','3\pi/2','2\pi'});%關聯的標籤,用cell指定刻度標籤

本文的參考圖文本中的希臘字母和特殊字符

從創建sin()函數坐標軸顯示pi的完整代碼;

x=linspace(0,2*pi,200);y=sin(x);h= plot(x,y);xticks([0,pi/2,pi,3*pi/2,2*pi]);    %位置指定為向量xticklabels({'0','\pi/2','\pi','3\pi/2','2\pi'});%關聯的標籤,用cell指定刻度標籤

顯示的結果:

line specification畫線特例

line style and width:
指定一個property,設定一個內容
例程:

set(h,'linestyle','-.','linewidth',7.0,'color','g');

例程執行的結果:線的風格是實點線;線寬7.0,線的顏色:綠色

另一種方法:

plot(x,y,'-.g','linewidth',7.0);

如果執行delete(h)會怎樣?
整幅圖都沒有了

marker specification繪製點的特例

marker有兩個部分,一個是face,另一個是edge
face and edge colors of the marker

例程:

x=rand(20,1);set(gca,'fontsize',18);plot(x,'-md','linewidth',2,'markeredgecolor','k','markerfacecolor','g','markersize',10);xlim([1,20]);

執行結果:

課後作業:

題目要求在圖片上,標註1,2,3的地方

我的練習:我把顏色改成了青色c,黑色線寬是7

原始碼:

t=1:0.01:2;f=t.*t;g=sin(2*pi*t);%繪圖hold onplot(t,g,'or','markerfacecolor','c');plot(t,f,'k-','linewidth',7);%設置字體、坐標軸set(gca,'fontsize',16);xlabel('Time (ms)');ylabel('f(t)');title('Mini Assignment #1');%顯示圖線標註legend('t^2','sin(2\pit)');

練習結果:

multiple figures顯示多幅圖

create a figure window by calling figure
在使用plot()函數之前先呼叫figure
看例程:

x=-10:0.1:10;y1=x.^2-8;y2=exp(x);figure,plot(x,y1);figure,plot(x,y2);

運行結果:

be careful when using the gcf handle where there exists multiple figures

當想要使用gcf獲取畫線的屬性的時候要當心,因為這個gcf指向的是最新的figure,要改變的就是當前的figure,之前的figure上的屬性是改的哦。想改的話,需要用別的方法。

figure positon and size顯示的位置和大小

several plots in one figure多圖在一張圖顯示

several small plots in a figure

範例程式,需要畫四個圖在一個figure中

t=0:0.1:2*pi;x=2*cos(t); y=sin(t);subplot(2,2,1); plot(x,y); axis normalsubplot(2,2,2); plot(x,y); axis squaresubplot(2,2,3); plot(x,y); axis  equalsubplot(2,2,4); plot(x,y); axis equal tight

執行結果:

上圖中最正確的圖是左下角 :

axis equal 兩個坐標軸刻度一樣
axis square tight 是讓邊框切齊於畫的圖
axis square 是讓圖片顯示呈現正方形,但是會讓繪製出來的東西變形

Control of Grid,Box,and Axis 控制格線


想把坐標關掉
axis off

把x軸和y軸上半部分關掉 box off

柵格線打開 grid on

繪圖存儲 Saving Figures into Files

saveas(gcf,'<文件名>','formatytype');

另外,存高解析度的圖要用print。

總結
本文主要記錄了繪圖的一部分基礎知識。
包括繪圖物件的繼承關係,物件的屬性獲取與修改,繪製多幅圖,顯示柵格,保存圖片。
保存圖的時候沒有例程。


相關焦點

  • MATLAB基礎教程-臺大郭彥甫-學習筆記4
    在matlab中當作函數使用。'xdata',[4 2 8],'ydata',[7 1 6]));結構體中增加一組成員A(2).data=[9 3 2;7 6 5];A(2).nest.testnum='Test 2';A(2).nest.xdata=[3 4 2];A(2).nest.ydata=[5 0 9];顯示兩個成員中的nest
  • matlab基礎教程一
    2.1.1 if-else-end分支結構 形式12.1.2 if-else-end分支結構 形式2t = 1:5if 0 t1 = 6-telse 1 t1 = t - 2end2.1.3 if-else-end分支結構 形式3t = 1:5if 0 t1 = 6-
  • Python基礎教程—Spyder簡介和Python版本
    1、Spyder工作頁面介紹Spyder的界面設計和matlab十分地相似,熟悉matlab的同學可以很快地習慣使用Spyder。代碼編輯區域:編寫整塊的代碼編寫。代碼執行按鈕:代碼編寫完成後,點擊執行按鈕進行執行控制臺:代碼之後的結果顯示在控制臺中;另外,單行代碼執行也可以在控制臺中執行,如圖中所示。
  • Matlab有限元計算
    點按上方藍色文字關注有限元學習交流之家,各領域大神匯聚之地對於開始學習有限元的人來說,簡單了解下有限元計算的基本思路是很有必要的
  • 學習matlab的一點心得體會
    而後由於所學的專業是生命科學和環境相關的東西,用到matlab的機會不多,主要是一些功能用matlab實現起來不是很方便,而且手邊有現成的軟體可以做到,例如圖像分析,還有DNA序列分析都有現成軟體等。本以為不會與其有太多交集。我下決心學習matlab是在經歷幾件事情之後。
  • 學習matlab必去的10大網站
    ),今天再添猛料,給大家分享幾個小編學習時常使用的學習網站。Help Center是MathWorks公司推出的集matlab參考文檔、程序示例、函數集合、視頻簡介、疑難解答於一體的綜合matlab學習平臺。在這裡不僅學習基礎matlab編程,還包括simulink、工具箱等高階matlab知識,是提升matlab編程能力不可不去的地方。
  • 學習筆記系列NO.1 SQL學習筆記及資料分享
    本期就是一期非常良心的學習資料分享~希望大家能覺得有用~為什麼學SQL呢,就是因為看到越來越多的產品崗,數據崗,戰略崗甚至營銷崗都開始要求會使用
  • 大牛心得:學習matlab的一點心得體會
    今天論文君跟大家分享一篇大牛學習matlab的心得體會。我接觸Matlab的時間比較長了,最開始是在大學裡面的數學實驗課上了解了一些,學了些基礎的命令,後來參加過一次數學建模,又自學了點。而後由於所學的專業是生命科學和環境相關的東西,用到matlab的機會不多,主要是一些功能用matlab實現起來不是很方便,而且手邊有現成的軟體可以做到,例如圖像分析,還有DNA序列分析都有現成軟體等。本以為不會與其有太多交集。我下決心學習matlab是在經歷幾件事情之後。
  • 郭彥甫直播痛哭!郭彥均反遭疑憂鬱症
    郭彥均也笑說和弟弟郭彥甫私訊時,經常得要反思他是什麼意思。而聊到弟弟日前開直播痛哭,郭彥均也代為報平安。郭彥均加入《WTO姐妹會》主持行列。郭彥甫日前開直播痛哭。郭彥均也笑說,當天郭彥甫開直播時,自己人正在外景工作,『我走在路上,有路人問我「你不是憂鬱症嗎」』,讓他一面覺得哭笑不得,一面趕緊打給郭彥甫詢問他的狀況,『我打給我弟,問他在幹嘛,他邊哭邊跟我說「我在直播」』,而他事後也傳訊息給弟弟,要他別想太多,『選擇的路就不要想太多』。至於郭彥甫近期專注在藝術工作,是否因此有經濟問題?
  • 郭彥甫前女友憤怒大揭底
    郭彥甫前女友憤怒大揭底2009-11-09 10:01     來源:中國新聞網     編輯:張蕾  臺灣藝人郭彥甫最近陷入裸聊風波,面對這樣的負面新聞他聲東擊西,反指前女友陳貞均是飯局妹,近日,郭彥甫接受媒體訪問時,透露曾當「車夫」載她到招待所。
  • 續 | 《SQL基礎教程》學習筆記
    點擊上方SQL資料庫開發,關注獲取SQL視頻教程上周給大家分享了一部分《SQL基礎教程
  • 獨/只見過一面 廠商贊助郭彥甫10年
    記者許逸群/臺北報導常上鏡頭的藝人通常會有服飾廠商主動給予贊助,曾主持《食尚玩家》的郭彥均與郭彥甫兄弟也有這樣的機會。不過郭彥甫近年專注於藝術區塊,已鮮少上節目通告甚至主持,但已贊助他10年的廠商至今仍與他保持合作關係。
  • Python基礎教程全套6.4:break和continue語句
    當前字母為 : R當前字母為 : u當前字母為 : n當前字母為 : o當前字母為 : o當期變量值為 : 10當期變量值為 : 9當期變量值為 : 8當期變量值為 : 7當期變量值為 : 6Good bye!
  • 如何通過Matlab做學習界面
    當時德語學習的App並不像現在這麼普及,背單詞也僅僅只是拿著一個小卡片,遮著單詞,一個字母一個字母的背,特別像90年代學英語的場景。後來發現,這種學習方法並不高效,就用Visual Basic寫了一個程序用來背單詞。因為這個背單詞的程序,我很順利的如期入學了。後來,我開始接觸Matlab寫GUI。
  • 郭彥甫認了與陳貞均的舊情 真的很愛她(圖)
    郭彥甫被爆與選美小姐陳貞均交往期間又網交劈2女,郭彥甫日前與哥哥郭彥均一起上TVBS歡樂臺《得獎的事》,坦言曾與陳貞均交往過,兩人因個性不合而分開,並否認視訊一事。   談到陳貞均,郭彥甫說:『我真的很愛她,我只要認定我愛這個人,不論她做什麼事,我還是愛她。』 郭彥甫在節目中認了與陳貞均的舊情,還形容是一段很真實的感情,加上感情一直是他的死穴,因為不想傷害到其他人,才會在事件爆發後息事寧人。
  • 【學習刺繡基礎教程】線狀針法——回針繡
    【學習刺繡基礎教程】線狀針法——回針繡 2020-12-08 14:20
  • 諾曼 houdini免費基礎教程 !目錄! 免費獲得價值3880元的基礎教程
    ,我喜歡結合17年houdini使用經驗,以及7年好萊塢電影製作經驗來錄製基礎教程(2018 水型物語 獲得2018奧斯卡最佳影片獎),並且包含「出錯後如何處理系列視頻」 幫助houdini 新人學習houdini過程中解決問題
  • 郭彥甫裸聊遭前女友踢爆 陳貞均照片大公開(圖)
    郭彥甫與前女友陳貞均   郭彥甫疑似劈腿兩女雙雙(左)、Mini(右)  齊魯網12月12日訊 臺灣著名偶像團體「2 more」成員之一郭彥甫日前遭前女友陳貞均爆料劈腿兩名網絡美眉,又愛玩視訊網交,後來陳貞均反被指稱是「飯局妹」,郭彥甫也坦承曾傻傻的當車夫,送女友去招待所玩樂。
  • 臺男星郭彥甫被曝「腳踏四船」 愛拍豔照愛裸聊
    郭彥甫(資料圖)  北京時間5月30日消息,據臺灣媒體報導,在2009年底,娛樂周刊報導雙胞胎主持人2moro弟弟郭彥甫除了正牌女友外還連劈二女,今日,周刊又爆料,其實當時郭彥甫還同時和香港模特兒馮鎵瀅
  • 郭彥甫流感攻心臟劉耕宏即刻救援 醫生:再晚兩小時就不行了
    記者許逸群/臺北報導藝術家兼藝人的郭彥甫日前流感攻心,因感冒造成病毒感染,在美國的他緊急赴醫院治療,「我真的差點死掉,醫生說『大概再兩個小時你就不行了』。我去敲耕宏的門,他救了我一命,他帶著我跑了5、6公裡找醫院。」