Python數據可視化 課件 第1、2章 數據可視化概述、Matplotlib圖形構成_第1頁
Python數據可視化 課件 第1、2章 數據可視化概述、Matplotlib圖形構成_第2頁
Python數據可視化 課件 第1、2章 數據可視化概述、Matplotlib圖形構成_第3頁
Python數據可視化 課件 第1、2章 數據可視化概述、Matplotlib圖形構成_第4頁
Python數據可視化 課件 第1、2章 數據可視化概述、Matplotlib圖形構成_第5頁
已閱讀5頁,還剩62頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Python數據可視化第1章

數據可視化概述教師:xxx2024.07第1節

可視化釋義與簡史第1章

數據可視化概述第2節

數據可視化的意義第3節

數據可視化分類第4節

數據可視化理論基礎第5節

數據可視化與其他學科領域的關系第6節

數據文件處理第7節

Anaconda開發環境數據可視化是關于數據視覺表現形式的科學技術研究。數據可視化是一個處于不斷演變之中的概念,其邊界在不斷地擴大。數據可視化的起源沒有一個統一的結論,大多數研究認為,數據可視化起源于統計學誕生的時代。第1節

可視化釋義與簡史公元10世紀的天文數據可視化圖英格蘭1700-1780年進出口情況折線圖數據的可視化展示有多種方式,好的方式能使用戶清晰、直觀、高效地理解數據背后的含義,而糟糕的可視化方式則會使用戶感覺異?;靵y。第2節

數據可視化的意義有效的可視化有助于我們分析理解數據,StephenFew列舉了如下8種定量信息,對這些定量信息的可視化有助于理解或交流數據信息。一、可視化有助于決策時間序列排序局部到整體偏差頻率分布相關名義比較地理或地理空間第2節

數據可視化的意義數據可視化的適用范圍有著不同的劃分方法,常見的關注焦點就是信息的呈現。二、可視化的適用范圍思維導圖新聞的顯示數據的顯示連接的顯示網站的顯示文章與資源工具與服務《DataVisualization:ModernApproaches》》概括闡述了數據可視化的下列7個主題:可視化算法與技術方法立體可視化信息可視化多分辨率方法建模技術方法交互技術方法與體系架構FritsH.Post從計算機科學的視角,將這一領域劃分為如下6個子領域:第2節

數據可視化的意義數據可視化首先要弄清楚可視化要表達的意圖。不同的需求需要用不同的可視化圖形來反映。常見可視化圖形:柱狀圖、折線圖、餅圖、直方圖、氣泡圖、密度圖和散點圖等。三、常用可視化圖形#舉例:柱狀圖importnumpyasnpimportmatplotlib.pyplotasplt

#導入繪圖庫x=np.arange(15)y=1.5*xplt.bar(x,y,label="y=1.5*x")

#柱狀圖plt.legend()

#顯示圖例plt.show()

#顯示圖形,右圖柱狀圖通過對數據的歸類可以將數據可視化分為:層次數據可視化、多維數據可視化、時序數據可視化和地理數據可視化等。第3節數據可視化分類

一、層次數據可視化1.節點鏈接法(Structure-clarity)常用的布局有正交布局、徑向布局和自由布局。

聚類圖(正交布局)Flare軟件包的目錄結構(徑向布局)第3節數據可視化分類

一、層次數據可視化2.空間填充法(space-efficiency)空間填充法是從空間的角度來實現層次數據的可視化。為了表達節點的父子關系,將子節點整個封裝在父節點中。磁盤空間可視化圖(空間填充法)第3節數據可視化分類

一、層次數據可視化3.混合填充法混合填充法在可視化時結合了節點鏈接法和空間填充法,在更復雜的可視化情況下可以利用兩種填充法的特點對可視化內容加以合理展示。彈性層次圖(混合填充法)第3節數據可視化分類

二、多維數據可視化多維數據可視化是指通過一些手段將高維的數據展示在二維的平面中,常用于探索性數據分析及對聚類或分類問題的驗證中。常用的有:平行坐標、RadViz雷達圖、Andrews曲線等。下面以平行坐標為例,其他方式見教材。以經典的鳶尾花數據集為例,下表是5條鳶尾花的數據,前4列是鳶尾花的4個特征(花萼sepal長、寬,花瓣petal長、寬),最后1列是鳶尾花的3種分類。SepalLengthSepalWidthPetalLengthPetalWidthSpecies6.42.85.62.2virginica52.33.31versicolor4.92.54.51.7virginica4.93.11.50.1setosa5.73.81.70.3setosa第3節數據可視化分類

二、多維數據可視化圖中每條垂直的線代表一個特征,表中一行的數據在圖中表現為一條折線,不同顏色的線表示不同的花類別。繪圖代碼如下所示。importpandasaspdimportmatplotlib.pyplotasplt#引入pandas中的平行坐標圖frompandas.plottingimportparallel_coordinatesdata=pd.read_csv('data/多維可視化示例1.csv')#讀取csv文件plt.title('parallel_coordinates')parallel_coordinates(data,'Species',color=['blue','green','red'])plt.show() 多維數據可視化平行坐標示例第3節數據可視化分類

三、時序數據可視化時序數據是指時間序列數據,常見于統計學中。時間序列數據在數據科學領域無處不在,可用于分析價格趨勢,預測價格,探索價格行為等。時間序列數據可視化在不同應用場景需求不同,下面為Python中的時間序列數據可視化例子。單個時間序列(股價圖)移動平均時間序列(股價均線)多個時間序列對比數據可視化不僅是一種藝術,也是一門具有方法論的學科。在實際應用中需要采用系統化的思維設計數據可視化方法及工具。第4節

數據可視化理論基礎一、數據可視化流程數據可視化經過長期的發展,逐漸形成了可視化的完整流程。預處理數據關注數據幾何數據圖像數據原始數據數據分析過濾映射繪制數據可視化的流程第4節

數據可視化理論基礎一、數據可視化流程數據可視化流程中的核心要素包括三個方面:1.數據表示與變換;2.數據的可視化呈現;3.用戶交互。二、數據可視化設計數據可視化的設計可以簡化為四個級聯的層次:概括現實生活中用戶遇到的問題抽象相應數據類型設計編碼和交互方法實現算法和交互第4節

數據可視化理論基礎三、可視化的基本圖表基本的可視化圖表按照所呈現的信息和視覺復雜程度通常可以分為兩類:原始數據繪圖和多視圖協調關聯。1.原始數據繪圖原始數據繪圖用于可視化原始數據的屬性值,直觀展示數據特征,典型的原始數據繪圖如下:

股票數據軌跡圖(數據軌跡)

房屋銷售對比圖(柱狀圖)直方圖第4節

數據可視化理論基礎三、可視化的基本圖表1.原始數據繪圖原始數據繪圖用于可視化原始數據的屬性值,直觀展示數據特征,典型的原始數據繪圖如下:

散點圖等值線圖(地形等高線圖)餅圖第4節

數據可視化理論基礎三、可視化的基本圖表2.多視圖關聯多視圖關聯將不同種類的繪圖組合起來,每個繪圖單元可以展現數據某個方面的屬性,通常也允許用戶進行一定程度的交互分析,提升用戶對數據模式的識別能力。右圖使用了不同視圖來展示同一屬性,通過使用相同的過濾條件和排序方式,使得比例尺中包含順序相同的屬性值。第4節

數據可視化理論基礎四、可視化設計基本原則與主要步驟(一)可視化設計的基本原則可視化的首要任務是準確地展示和傳達數據所包含的信息。(二)可視化設計的主要步驟設計制造一個可視化視圖包括如下三個主要步驟:(1)數據到可視化的直觀映射(2)視圖選擇與交互設計(3)數據的篩選為了提高可視化圖形的有效性,有時設計還包括顏色、標記和動畫等要素的設計。數據可視化作為數據展示的方式,本身與信息圖、信息可視化、科學可視化以及統計圖形密切相關,也是數據科學中必不可少的環節。數據科學在許多領域的應用也必然與相關領域的學科具有一定的關系。第5節數據可視化與其他學科領域的關系一、圖形學、計算機仿真及人機交互計算機圖形學關注空間建模、外觀表達與動態呈現,它為可視化提供數據的可視編碼和圖形呈現的基礎理論與方法。計算機仿真獲得的數據是數據可視化的處理對象之一,而將仿真數據以可視化形式表達是計算機仿真的核心方法。在數據可視化中,通過人機界面接口實現用戶對數據的理解和操縱,數據可視化的質量和效率需要最終用戶的評判。因此,數據、人、機器之間的交互是數據可視化的核心。第5節數據可視化與其他學科領域的關系二、數據庫與數據倉庫數據庫是按照數據結構來組織、存儲和管理數據的倉庫,它高效地實現數據的錄入、查詢、統計等功能。盡管現代數據庫已經從最簡單的存儲數據表格發展到海量、異構數據庫存儲的大型數據庫系統,但它的基本功能中仍然不包括復雜數據的關系和規則的分析。數據可視化通過數據的有效呈現,有助于復雜關系和規則的理解。數據庫和數據倉庫是大數據時代數據可視化方法中必須包含的兩個環節。為了滿足復雜大數據的可視化需求,必須考慮新型的數據組織管理和數據倉庫技術。第5節數據可視化與其他學科領域的關系三、數據分析與數據挖掘數據分析是統計分析的擴展,指用數據統計、數值計算、信息處理等方法分析數據,采用已知的模型分析數據,計算與數據匹配的模型參數。數據挖掘指從數據中選擇合適的數據類型,分析和挖掘大量數據背后的知識。目標是從大量、不完全、模糊隨機的數據中,提取隱含在其中的有用的信息和知識。數據可視化和數據分析與數據挖掘的目標都是從數據中獲取信息與知識,但手段不同。第5節數據可視化與其他學科領域的關系四、面向領域的可視化方法與技術數據可視化是對各類數據的可視化理論與方法的統稱。在可視化歷史上,與領域專家的深度結合導致了面向領域的可視化方法與技術。常見的面向領域的可視化技術有:1.生命科學可視化,指面向生物科學、生物信息學、基礎醫學、轉化醫學、臨床醫學等一系列生命科學探索與實踐中產生的數據的可視化方法。2.表意性可視化,指以抽象、藝術、示意性的手法闡明、解釋科技領域的可視化方法。3.地理信息可視化,指數據可視化與地理信息系統學科的交叉方向,它的研究主體是地理信息數據,包括建立在真實物理世界基礎上的自然性和社會性事物及其變化規律。...第5節數據可視化與其他學科領域的關系五、信息視覺設計面向廣義數據的視覺設計,是信息設計中的一個分支,可抽象為某種概念形式如屬性、變量的某種信息。信息視覺設計包含了兩個主要領域:統計圖形學和信息圖。統計圖形學應用于統計數據相關的領域,它的大部分方法如散點圖、熱力圖等方法已經是信息可視化的最基本方法。信息圖限制于二維空間上的視覺設計,偏重于藝術的表達。第6節數據文件處理一、pandas讀取數據文件pandas庫是目前Python做數據分析必備的庫,該庫提供了各種讀寫數據文件的方法。支持的文件格式有csv、excel、spss、stata、pickle、hdf和sql等。示例見隨書代碼"01.ipynb"文件。導入pandas包的語法如下:importpandasaspd實際工作時我們處理的數據一般來自文件或數據庫,數據文件有各種不同的格式。二、從JSON數據源導入數據JSON(JavaScriptObjectNotation)是一種輕量級的數據交換格式,目前很多應用程序都以json格式作為數據導入導出的格式。下例是一個JSON文件的內容:{

"ID01":{"name":"大壯","age":20,"sex":"男"},

"ID02":{"name":"小明","age":21,"sex":"男"},

"ID03":{"name":"小美","age":21,"sex":"女"}}第6節數據文件處理三、導出數據到Excel、JSON和CSV處理好的數據可以保存為各種格式,常見的有Excel、JSON、csv等。導出到Excel將數據導出為excel有多種方法,如使用模塊xlwt或openpyxl,最便捷的方法是使用pandas。importpandasaspddata={'id':['1','2','3'],'score':[90,85,87]}df=pd.DataFrame(data)df.to_excel('data/studata.xlsx') #使用pandas導出為excel文件導出到CSV文件CSV文件以逗號為數據的間隔符,導出時可以借助pandas。importpandasaspddata={'name':['張西','李明','劉風'],'score':[90,85,87]}df=pd.DataFrame(data)df.to_csv('data/stu.csv',encoding='GBK') #存為csv文件,指定用GBK中文編碼第6節數據文件處理三、導出數據到Excel、JSON和CSV導出到json文件JSON文件可以在程序間共享數據,pandas也提供了導出為json文件的命令。json模塊中的dump()函數也可導出json文件。importpandasaspddata={'id':['1','2','3'],'score':[90,85,87]}df=pd.DataFrame(data)df.to_json('data/studata.json') #方法1:利用pandas導出為json文件importjsonwithopen('data/studata2.json','w')asf:json.dump(data,f) #方法2:利用json模塊的dump方法導出第6節數據文件處理四、從數據庫導入數據Python自帶SQLite模塊,可直接支持SQLite這一微型數據庫。其它數據庫在安裝相應驅動模塊后都可以以統一的命令方式使用。使用某種數據庫前需要引入相關的數據庫驅動包。如使用SQLite,則引入sqlite包,語句為“importsqlite3”。如使用MySQL數據庫,則引入pymysql包,語句為“import

pymysql”。操作時一般按以下步驟:(1)連接數據庫引擎;(2)在選擇的表上執行查詢操作;(3)讀取從數據庫引擎返回的結果。第6節數據文件處理五、生成隨機數據數據分析中經常要生成隨機模擬數據,numpy.random模塊提供了很多隨機數函數,下面給出一些隨機數生成的例子。importnumpyasnpnp.random.seed(7) #設定隨機數種子,可指定任意種子值np.random.randint(1,9,size=(2,3)) #生成[1,9)區間的2行3列隨機整數數組np.random.random(10) #生成10個[0.0,1.0)間的隨機小數np.random.randn(3,4) #生成符合標準正態分布的3行4列二維數組np.random.normal(loc=2,scale=3,size=(3,4))#生成符合正態分布N(2,9)的3行4列二維數組np.random.uniform(2,5,size=(3,4)) #生成[2,5)范圍內均勻分布的3行4列二維小數數組第6節數據文件處理五、生成隨機數據下面的代碼用隨機數模擬生成價格波動序列。

importnumpyasnpimportmatplotlib.pyplotaspltnp.random.seed(7) #隨機種子#符合正態分布N(0.2,1.44)的價格波動序列price=np.random.normal(loc=0.2,scale=1.2,size=100)y=np.cumsum(price) #累加價格波動plt.plot(y,'b.-') #折線圖,此處x默認為[0,1,2,..,len(y)-1]plt.xlabel('Time') #設置x軸標簽plt.ylabel('Value') #設置y軸標簽第6節數據文件處理六、數據噪聲的平滑處理我們日常處理的數據并不是非常干凈的理想數據,數據中總是包含噪聲或干擾,例如傳感器采集的數據。我們希望圖表能清晰地傳遞信息,使用戶易于理解。因此,對真實數據的噪聲做平滑處理是有意義的。下面代碼先生成隨機數據并加入噪聲,后續進行了模擬平滑處理。

第6節數據文件處理六、數據噪聲的平滑處理

importnumpyasnpimportmatplotlib.pyplotaspltdefmoving_average(interval,window_size):window=np.ones(int(window_size))/float(window_size)returnnp.convolve(interval,window,'same') #用np卷積函數做平滑

t=np.linspace(start=-4,stop=4,num=100)y=np.sin(t)+np.random.randn(len(t))*0.1 #加入隨機數作為噪聲y_av=moving_average(interval=y,window_size=10) #平滑處理plt.plot(t,y,"b.-",t,y_av,"r.-")plt.legend(['originaldata','smoothdata']) #顯示圖例plt.xlabel('Time')plt.ylabel('Value')plt.grid(True) #顯示網格線隨機數和噪聲平滑處理第7節Anaconda開發環境一、Anaconda概述學習Python數據可視化之前我們先要準備好工作環境,包括:編輯器、解釋器、可視化軟件包、配套工具庫等。集成開發環境(IDE)將提供上述工具的集成。Anaconda是一個開源的Python發行版本,包含了Python內核,同時還自帶conda、numpy、seaborn、pandas和matplotlib等眾多科學工具庫及其依賴庫。如果安裝了Anaconda,就不再需要單獨安裝Python及其他常用工具庫了,本書后面章節涉及的很多庫均已包含。Anaconda支持主流的操作系統,包括Windows、Linux和MacOS。第7節Anaconda開發環境一、Anaconda概述(一)Anaconda安裝1.下載Anaconda建議從Anaconda官網/archive/下載2023.9月版本,本書最新代碼在此版本下調試通過。2.安裝Anaconda如右圖所示,建議安裝時勾選"AddAnaconda3tomyPATH"選項,將安裝路徑添加到系統PATH環境變量中,方便后續在命令行上調用程序。第7節Anaconda開發環境一、Anaconda概述3.Anaconda程序組調試本書代碼時推薦使用Spyder或JupyterNotebook工具。如需在命令行安裝其他工具包,可選擇“AnacondaPrompt”進入命令行環境,然后使用pip或conda工具安裝第三方包。第7節Anaconda開發環境一、Anaconda概述(二)使用JupyterNotebook本書提供的代碼文件需在Anaconda自帶的JupyterNotebook環境下運行。在“開始”菜單中選擇“Anaconda/JupyterNotebook”,計算機將啟動一個命令行窗口運行Notebook的后臺服務器(注:不要關閉此窗口),隨后會啟動默認的瀏覽器,呈現如下圖所示的界面。Jupyter的使用請參看隨書文檔"jupyter配置.ipynb"。第7節Anaconda開發環境一、Anaconda概述(三)可視化繪圖庫使用Python進行數據可視化需要使用第三方可視化庫。常用的可視化庫有:lMatplotlib:這個繪圖庫使用最廣泛,用戶主要和Matplotlib.pyplot模塊打交道。本書前面的章節重點介紹該庫。lSeaborn:Seaborn可以實現比Matplotlib更美觀、更快捷的可視化效果,本書第7章介紹該庫。lVeusz:這是一個用Python和PyQt編寫的GPL科學繪圖包,也能嵌入到其他Python程序中。lMayavi:一個三維繪圖包,支持Python腳本。第7節Anaconda開發環境二、可視化工具介紹可視化工具有很多,有的工具軟件操作簡單,無須編程,通過簡單的菜單操作即可輸出統計圖形;有的軟件功能強大,接口靈活,但需編程操作,給用戶提供了最大的定制性和靈活性,在處理大數據集上有優勢。常用可視化工具軟件有:1、Excel:最常用的辦公軟件,具備圖形生成功能,操作簡單;2、GoogleSpreadsheets:類似Excel的web電子表格軟件;3、Tableau:通過單擊和拖拽生成圖形,大多數時候不需編程;4、D3.js:需編程實現。第7節Anaconda開發環境三、交互可視化軟件包目前在數據分析領域中常用的交互可視化軟件包有Poltly、Pyecharts、Bokeh和VisPy等。交互表示生成的圖形有一定互動性,隨鼠標移動和點擊而變化。(一)PlotlyPlotly是Python環境下基于瀏覽器的交互式圖形庫,構建在plotly.js之上。plotly是一個高級的聲明式圖表庫,提供了30多種圖表類型。本書第9章介紹。Poltly還支持將圖形存放在云端,可以在線分享和修改圖形。Poltly還支持創建DashWeb應用程序,這樣我們僅使用Python語言即可構建Web應用。Poltly是目前Python平臺下功能最強大的可視化庫。第7節Anaconda開發環境三、交互可視化軟件包(二)PyechartsPyecharts支持40余種圖形類型,例如柱形圖、折線圖、水球圖、桑基圖和百度地圖等。本書第8章介紹。該庫只支持Python原生數據類型,例如列表、元組和字典,不支持Numpy和Pandas數據類型。Pyecharts偏重于可視化效果,缺少一些統計類圖表。Pyecharts是一款國產軟件,提供在線中文幫助文檔。Python數據可視化ThankYou!Python數據可視化第2章Matplotlib圖表構成教師:xxx2024.07第1節Matplotlib繪圖基礎第2章

Matplotlib圖表構成第2節子圖劃分第3節Axes屬性設置第1節Matplotlib繪圖基礎Matplotlib是Python平臺使用最廣泛的繪圖庫。其結構比較復雜,包含眾多的繪圖對象和函數。為方便調用,matplotlib.pyplot模塊提供了一組命令式繪圖接口函數,繪圖時主要使用此模塊。importmatplotlib.pyplotasplt。下面先看兩例:一、繪圖框架importnumpyasnpimportmatplotlib.pyplotasplt #導入繪圖庫plt.rcParams['font.family']='SimHei' #設黑體字體以顯示中文plt.rcParams['axes.unicode_minus']=False #正常顯示負號x=np.linspace(-2*np.pi,2*np.pi,100) #在[-2π,2π]間生成數列plt.plot(x,np.sin(x),label='sin(x)') #繪制正弦曲線plt.plot(x,np.cos(x),label='cos(x)') #繪制余弦曲線plt.legend(fontsize=14) #顯示圖例plt.title('正弦-余弦曲線',fontsize=18) #圖形標題plt.savefig('pic1.png',transparent=True) #保存為背景透明的圖片第1節Matplotlib繪圖基礎(三)繪制散點圖一、繪圖框架importnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams['font.family']='SimHei' x=np.arange(1,21) #x作為自變量y=2*x+1+np.random.uniform(-2,2,20) #"y=2x+1+隨機數"模擬產生因變量yax=plt.gca() #返回當前繪圖區域對象(類型為Axes)ax.scatter(x,y,label='scatterfigure') #在ax上繪制散點圖ax.set_title('散點圖',fontsize=18) #圖標題ax.set_xticks(range(0,25,5)) #設置x軸顯示的刻度值ax.set_xlabel('X軸',fontsize=14) #X軸標簽ax.set_ylabel('Y軸',fontsize=14) #Y軸標簽第1節Matplotlib繪圖基礎上面兩段代碼采用了兩種編碼風格。一種是類似MATLAB風格的“plt.函數()”的方式,這種方式簡單,初學者上手快。另一種是采用“ax.set_函數()”的面向對象方式編碼,這種設置更靈活。一、繪圖框架(四)架構層次Matplotlib庫采用面向對象方式架構,主要分為三個層次:1.matplotlib.backend_bases.FigureCanvasBase:繪圖畫板,用于承載畫布。2.matplotlib.backend_bases.RendererBase:代表渲染器,用于在畫板上繪圖。3.matplotlib.artist.Artist:代表各類圖表組件,這些組件利用渲染器繪圖。Artist即對應折線、柱體等圖形對象。一般繪圖只需生成Artist,1和2無需自行生成,均默認存在。圖形繪制在一個Figure(畫布)上,Figure上至少有一個Axes(子圖)對象,可根據需要劃分多個Axes。在Axes中可添加簡單類型的Artist(例如折線/散點/柱形等)。第1節Matplotlib繪圖基礎繪圖前先準備好數據,數據多采用列表、numpy數組或pandas的DataFrame和Series等格式。繪圖基本流程如右圖所示。二、繪圖流程importnumpyasnpimportmatplotlib.pyplotasplt#導入繪圖庫x=np.linspace(-2*np.pi,2*np.pi,100)#準備數據plt.plot(x,np.sin(x),label='sin(x)')

#繪正弦曲線plt.title('sin(x)',fontsize=18)

#標題plt.legend(fontsize=14) #圖例plt.xlabel('x')

#x軸標簽plt.grid() #網格線plt.show()

#顯示圖形第1節Matplotlib繪圖基礎在構成圖表的各種Artist對象中,Figure(畫布)位于最頂層。它容納了圖形的所有元素,是后續所有繪圖對象的總容器。畫布對象默認已存在,無需自己創建,有需要時也可自建。該對象常用屬性有:三、Figure對象Figure.patch:畫布的背景矩形。Figure.axes:畫布上的所有Axes子圖構成的列表。Figure.images:畫布上的所有img圖片構成的列表。Figure.texts:畫布上的所有文字實例構成的列表。創建新畫布使用函數plt.figure(),格式如下。(8,6)表示畫布寬8英寸,高6英寸fig=plt.figure(figsize=(8,6),facecolor=None,edgecolor=None,frameon=True,**kwargs)fig=plt.gcf()#亦可用此命令獲取當前默認畫布對象,gcf:getcurrentfigure第1節Matplotlib繪圖基礎Axes是Figure上的繪圖區域,此術語也稱為子圖或坐標系。axes對象默認存在,也可自行創建。Axes是繪圖的核心對象,內部可包含眾多圖形組件。Axes實例提供了繪圖的坐標系,還包含坐標軸對象(xaixs/yaixs軸)。四、Axes子圖屬性描述屬性描述artistsArtist對象linesLine2D對象列表patch作為Axes背景的Patch對象,可以是Rectangle或CirclepatchesPatch對象列表collectionsCollection對象textsText文字對象列表imagesAxesImage對象xaxisXAxis,即x軸legendLegend圖例對象yaxisYAxis,即y軸Axes對象的屬性第1節Matplotlib繪圖基礎Axes對象包含很多繪圖函數。例如,ax.plot()繪制折線圖,ax.bar()繪制條形圖。四、Axes子圖Axes對象的繪圖方法Axes方法創建對象存儲于列表Axes方法創建對象存儲于列表annotateAnnotatetextsimshowAxesImageimagesbarRectanglepatchestextTexttextserrorbarLine2D、Rectanglelines,patchesplotLine2DlinesfillPolygonpatchesscatterPolygonCollectioncollectionshistRectanglepatches

第1節Matplotlib繪圖基礎四、Axes子圖fig=plt.figure()

#新畫布#用add_subplot創建axes對象,1行2列的第1個子圖ax=fig.add_subplot(121)ax.patch.set_facecolor('b')

#設置子圖背景為藍色#設置背景的透明度,范圍0-1,1表示不透明ax.patch.set_alpha(0.1)#繪制一條線,線是Line2D對象ax.plot([0,1,2],[1,2,3],c='r',marker='x')ax.plot([-1,0,1],[-1,0,1],c='b',marker='d')#再繪一條線#列表lst中含有2個Line2D對象,可供后續修改時引用lst=ax.lines第1節Matplotlib繪圖基礎pyplot不支持中文,中文會錯誤顯示為小方框,需用plt.rcParams["font.family"]參數設置中文字體。設置中文字體后將導致坐標刻度的負號無法顯示,因此還需設置axes.unicode_minus參數,代碼如下:五、設置pyplot的參數importmatplotlib.pyplotaspltplt.rcParams['font.family']='SimHei' #設置黑體字體以正確顯示中文plt.rcParams['axes.unicode_minus']=False #確保負號顯示正常plt.xlim((-5,5)) #設置x軸刻度范圍plt.title('中文標題') #執行上面的plt.rcParams語句后,中文和負號應顯示正常plt.rcParams['font.sans-serif']='SimHei' #設置黑體,此寫法亦可plt.rcParams['font.family']='ArialUnicodeMS' #Mac系統沒有Simhei,Mac應設置此中文字體第1節Matplotlib繪圖基礎rcParams表示“runconfiguration”運行配置參數的意思。繪圖對象有默認的屬性,這些屬性都可用plt.rcParams語句修改,示例如下。五、設置pyplot的參數x=np.linspace(1,10,100)plt.rcParams['lines.linestyle']=':' #修改線條為":"樣式

plt.rcParams['lines.linewidth']=5 #修改線條寬度plt.rcParams['font.size']=14 #設置字體的默認大小#sin曲線將采用上面設置的默認線形和寬度plt.plot(x,np.sin(x))#cos曲線用自設的'-.'樣式,寬度2plt.plot(x,np.cos(x),ls='-.',lw=2)plt.legend(['sin','cos']) #設圖例#修改上述默認設置后,可用下面的命令恢復默認設置

plt.rcdefaults()第2節子圖劃分一、等分子圖區域有時因為業務要求,需要將畫布劃分為若干子區域,每個子圖上繪制不同的圖形。plt有多種子圖劃分函數。plt.subplot()用于生成規整的行列布局的子圖,格式為:plt.subplot(numRows,numCols,plotNum)numRows表示將畫布分成幾行,numCols表示將畫布分成幾列,plotNum代表子圖編號(從1開始)。該命令執行后返回axes子圖對象,此對象將成為默認繪圖子圖,后續的圖形對象就自動繪制在此子圖上。plt.subplot(2,2,1) #2行2列的第一個子圖plt.subplot(221) #允許省略逗號,將參數寫為221,效果同上第2節子圖劃分一、等分子圖區域(一)plt.subplot()示例importmatplotlib.pyplotasplt#1行2列模式的第1個子圖,此為默認子圖plt.subplot(1,2,1)#在坐標(0.4,0.5)處顯示紅色字符串'121'plt.text(0.4,0.5,'121',c='red',fontsize=20)

plt.subplot(122) #1行2列模式的第2個子圖plt.text(0.4,0.5,'122',c='r',fontsize=20)第2節子圖劃分一、等分子圖區域(二)plt.subplots()示例執行此命令將返回一個畫布對象fig及由多個axes構成的數組。importmatplotlib.pyplotasplt#返回一個畫布對象fig,ax是二維數組,2行2列共4個子圖fig,ax=plt.subplots(nrows=2,ncols=2,figsize=(8,6))fig.patch.set_color('b') #畫布背景藍色fig.patch.set_alpha(0.1) #畫布背景透明度0.1x=np.arange(1,11)ax[0,0].plot(x,x) #y=x ax[0,1].plot(x,-x) #y=-xax[1,0].plot(x,x**2) #y=x2

ax[1,1].plot(x,np.log(x)) #y=lnx#ravel()將二維轉為一維以便遍歷fori,axesinenumerate(ax.ravel()): axes.set_title('ax'+str(i+1),fontsize='20')#設置子圖titlefig.tight_layout() #調整子圖間距,避免重疊第2節子圖劃分一、等分子圖區域(三)fig.add_subplot()示例對比上兩條命令,fig.add_subplot()命令的主體是畫布對象fig。fig=plt.figure() #創建新畫布ax1=fig.add_subplot(221) #2行2列的第1個子圖ax1.text(0.4,0.5,'ax1',c='r',fontsize=18)ax3=fig.add_subplot(223) #2行2列的第3個子圖ax3.text(0.4,0.5,'ax3',c='r',fontsize=18)ax2=fig.add_subplot(122) #1行2列的第2個子圖ax2.text(0.4,0.5,'ax2',c='r',fontsize=18) 第2節子圖劃分二、劃分復雜子圖如果遇到復雜的子圖劃分情況可考慮使用函數plt.subplot2grid()。該函數內含的rowspan和colspan參數可以讓子圖跨越網格的多行或多列,實現靈活的區域劃分。函數的工作方式是設定網格,選中網格,確定選中行列的數量。示例見第2章配套代碼文件"02.ipynb"。第2節子圖劃分三、圖中圖前面的命令劃分的是規整子圖。fig.add_axes()命令可在畫布的任意位置創建新子圖,即使與現有的Axes對象重疊亦可,這樣可實現圖中圖的特殊效果。x=[1,2,3,4,5,6,7]y=[1,7,15,24,30,50,55]plt.plot(x,y,'gD-')#g綠色,D菱形點,-實線plt.title('大圖',fontsize=20)fig=plt.gcf()#返回當前畫布#(left,bottom)新子圖左下角坐標,width:寬度,height:高度#此處將畫布寬和高均視為1left,bottom,width,height=0.2,0.5,0.25,0.25#在指定位置創建Axesax=fig.add_axes([left,bottom,width,height])ax.plot(x,y,'r^')#r^紅色三角點ax.set_title('圖中圖',fontsize=16)第3節Axes屬性設置Axes實例有x軸和y軸屬性,可以使用Axes.xaxis和Axes.yaxis來控制兩個軸的相關元素,例如刻度(tick)、刻度標簽(ticklabel)、刻度線定位器等。此外,Axes還包含網格線(grid)、參考區域、標題(title)、注釋(text)、圖例(legend)等圖形細節元素,如右圖所示。第3節Axes屬性設置一、軸屬性Axes的周邊有四條軸脊(top、bottom、left和right),默認底部的軸脊為x軸,左邊的軸脊為y軸,x軸和y軸上有刻度線和刻度標簽。函數set_color()、set_linewidth()和set_linestyle()用于設置軸脊的顏色、寬度和樣式。#以右軸脊為例,設置其顏色為黃色,寬度為10,樣式為虛線importmatplotlib.pyplotaspltax=plt.gcf().gca()

#返回當前畫布的當前子圖ax.spines['right'].set_color('y')

#設置右軸脊黃色ax.spines['right'].set_linewidth(10)

#線寬ax.spines['right'].set_linestyle('--')

#線條樣式第3節Axes屬性設置二、網格線、參考線和參考區域為了更好地觀察圖形和坐標軸的對應關系,通常會在繪圖區域添加一些參考元素。例如,背景網格線、水平參考線、豎直參考線、水平參考區域、豎直參考區域等。為避免背景喧賓奪主,可借助參數alpha調節背景透明度。alpha取值在0~1之間,值越小越透明。#設置網格線形態為"-.",紅色,透明度0.5plt.grid(linestyle="-.",c='r',alpha=0.5)第3節Axes屬性設置三、圖例圖例用于標識區分畫布上的不同繪圖組件。繪圖時可以先設置各組件的label,然后執行“plt.legend(loc=0)”顯示出圖例?!發oc=0”表示系統將自動選擇最合適的位置顯示圖例,盡量不遮蓋圖形,此為默認參數。用戶也可自行指定圖例的位置,例如loc=1表示右上角,loc=2表示左上角,loc=3表示左下角等。loc的取值還可以用字符串“upperright、upperleft、lowerleft”等替代,詳情請查詢幫助help(plt.legend)。x=np.arange(10)y1,y2,y3,y4=x,x*2,x*3,x*4plt.plot(x,y1,x,y2,'-.',x,y3,':',x,y4,'--')#在legend中為4條線設置label,(1.05,1)圖例在Axes區域以外plt.legend(['$y1=x$','$y2=2*x$','$y3=3*x$','$y4=4*x$'],bbox_to_anchor=(1.05,1));第3節Axes屬性設置四、標題為圖表添加標題可以說明繪圖區域的核心信息。plt.title()函數用于設置圖像標題,可以指定標題的名稱、位置、顏色、字體、大小等。plt.title('標題',fontsize=18,loc='center'),主要參數說明如下:loc:標題位置,取值可為“left/right/center”,默認居中。fontsize:字體大小,默認12。va:垂直對齊,可選參數“

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論