Python數(shù)據(jù)可視化 課件全套 鐘雪靈 第1-10章 數(shù)據(jù)可視化概述- 可視化應(yīng)用實(shí)例_第1頁
Python數(shù)據(jù)可視化 課件全套 鐘雪靈 第1-10章 數(shù)據(jù)可視化概述- 可視化應(yīng)用實(shí)例_第2頁
Python數(shù)據(jù)可視化 課件全套 鐘雪靈 第1-10章 數(shù)據(jù)可視化概述- 可視化應(yīng)用實(shí)例_第3頁
Python數(shù)據(jù)可視化 課件全套 鐘雪靈 第1-10章 數(shù)據(jù)可視化概述- 可視化應(yīng)用實(shí)例_第4頁
Python數(shù)據(jù)可視化 課件全套 鐘雪靈 第1-10章 數(shù)據(jù)可視化概述- 可視化應(yīng)用實(shí)例_第5頁
已閱讀5頁,還剩390頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Python數(shù)據(jù)可視化第1章

數(shù)據(jù)可視化概述教師:xxx2024.07第1節(jié)

可視化釋義與簡史第1章

數(shù)據(jù)可視化概述第2節(jié)

數(shù)據(jù)可視化的意義第3節(jié)

數(shù)據(jù)可視化分類第4節(jié)

數(shù)據(jù)可視化理論基礎(chǔ)第5節(jié)

數(shù)據(jù)可視化與其他學(xué)科領(lǐng)域的關(guān)系第6節(jié)

數(shù)據(jù)文件處理第7節(jié)

Anaconda開發(fā)環(huán)境數(shù)據(jù)可視化是關(guān)于數(shù)據(jù)視覺表現(xiàn)形式的科學(xué)技術(shù)研究。數(shù)據(jù)可視化是一個(gè)處于不斷演變之中的概念,其邊界在不斷地?cái)U(kuò)大。數(shù)據(jù)可視化的起源沒有一個(gè)統(tǒng)一的結(jié)論,大多數(shù)研究認(rèn)為,數(shù)據(jù)可視化起源于統(tǒng)計(jì)學(xué)誕生的時(shí)代。第1節(jié)

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

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

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

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

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

#柱狀圖plt.legend()

#顯示圖例plt.show()

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

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

聚類圖(正交布局)Flare軟件包的目錄結(jié)構(gòu)(徑向布局)第3節(jié)數(shù)據(jù)可視化分類

一、層次數(shù)據(jù)可視化2.空間填充法(space-efficiency)空間填充法是從空間的角度來實(shí)現(xiàn)層次數(shù)據(jù)的可視化。為了表達(dá)節(jié)點(diǎn)的父子關(guān)系,將子節(jié)點(diǎn)整個(gè)封裝在父節(jié)點(diǎn)中。磁盤空間可視化圖(空間填充法)第3節(jié)數(shù)據(jù)可視化分類

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

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

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

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

數(shù)據(jù)可視化理論基礎(chǔ)一、數(shù)據(jù)可視化流程數(shù)據(jù)可視化經(jīng)過長期的發(fā)展,逐漸形成了可視化的完整流程。預(yù)處理數(shù)據(jù)關(guān)注數(shù)據(jù)幾何數(shù)據(jù)圖像數(shù)據(jù)原始數(shù)據(jù)數(shù)據(jù)分析過濾映射繪制數(shù)據(jù)可視化的流程第4節(jié)

數(shù)據(jù)可視化理論基礎(chǔ)一、數(shù)據(jù)可視化流程數(shù)據(jù)可視化流程中的核心要素包括三個(gè)方面:1.數(shù)據(jù)表示與變換;2.數(shù)據(jù)的可視化呈現(xiàn);3.用戶交互。二、數(shù)據(jù)可視化設(shè)計(jì)數(shù)據(jù)可視化的設(shè)計(jì)可以簡化為四個(gè)級聯(lián)的層次:概括現(xiàn)實(shí)生活中用戶遇到的問題抽象相應(yīng)數(shù)據(jù)類型設(shè)計(jì)編碼和交互方法實(shí)現(xiàn)算法和交互第4節(jié)

數(shù)據(jù)可視化理論基礎(chǔ)三、可視化的基本圖表基本的可視化圖表按照所呈現(xiàn)的信息和視覺復(fù)雜程度通??梢苑譃閮深悾涸紨?shù)據(jù)繪圖和多視圖協(xié)調(diào)關(guān)聯(lián)。1.原始數(shù)據(jù)繪圖原始數(shù)據(jù)繪圖用于可視化原始數(shù)據(jù)的屬性值,直觀展示數(shù)據(jù)特征,典型的原始數(shù)據(jù)繪圖如下:

股票數(shù)據(jù)軌跡圖(數(shù)據(jù)軌跡)

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

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

散點(diǎn)圖等值線圖(地形等高線圖)餅圖第4節(jié)

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

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

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

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

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

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

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

第6節(jié)數(shù)據(jù)文件處理六、數(shù)據(jù)噪聲的平滑處理

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

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

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

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

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

#x軸標(biāo)簽plt.grid() #網(wǎng)格線plt.show()

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

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

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

#設(shè)置子圖背景為藍(lán)色#設(shè)置背景的透明度,范圍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個(gè)Line2D對象,可供后續(xù)修改時(shí)引用lst=ax.lines第1節(jié)Matplotlib繪圖基礎(chǔ)pyplot不支持中文,中文會錯(cuò)誤顯示為小方框,需用plt.rcParams["font.family"]參數(shù)設(shè)置中文字體。設(shè)置中文字體后將導(dǎo)致坐標(biāo)刻度的負(fù)號無法顯示,因此還需設(shè)置axes.unicode_minus參數(shù),代碼如下:五、設(shè)置pyplot的參數(shù)importmatplotlib.pyplotaspltplt.rcParams['font.family']='SimHei' #設(shè)置黑體字體以正確顯示中文plt.rcParams['axes.unicode_minus']=False #確保負(fù)號顯示正常plt.xlim((-5,5)) #設(shè)置x軸刻度范圍plt.title('中文標(biāo)題') #執(zhí)行上面的plt.rcParams語句后,中文和負(fù)號應(yīng)顯示正常plt.rcParams['font.sans-serif']='SimHei' #設(shè)置黑體,此寫法亦可plt.rcParams['font.family']='ArialUnicodeMS' #Mac系統(tǒng)沒有Simhei,Mac應(yīng)設(shè)置此中文字體第1節(jié)Matplotlib繪圖基礎(chǔ)rcParams表示“runconfiguration”運(yùn)行配置參數(shù)的意思。繪圖對象有默認(rèn)的屬性,這些屬性都可用plt.rcParams語句修改,示例如下。五、設(shè)置pyplot的參數(shù)x=np.linspace(1,10,100)plt.rcParams['lines.linestyle']=':' #修改線條為":"樣式

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

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

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

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

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

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

#線條樣式第3節(jié)Axes屬性設(shè)置二、網(wǎng)格線、參考線和參考區(qū)域?yàn)榱烁玫赜^察圖形和坐標(biāo)軸的對應(yīng)關(guān)系,通常會在繪圖區(qū)域添加一些參考元素。例如,背景網(wǎng)格線、水平參考線、豎直參考線、水平參考區(qū)域、豎直參考區(qū)域等。為避免背景喧賓奪主,可借助參數(shù)alpha調(diào)節(jié)背景透明度。alpha取值在0~1之間,值越小越透明。#設(shè)置網(wǎng)格線形態(tài)為"-.",紅色,透明度0.5plt.grid(linestyle="-.",c='r',alpha=0.5)第3節(jié)Axes屬性設(shè)置三、圖例圖例用于標(biāo)識區(qū)分畫布上的不同繪圖組件。繪圖時(shí)可以先設(shè)置各組件的label,然后執(zhí)行“plt.legend(loc=0)”顯示出圖例?!發(fā)oc=0”表示系統(tǒng)將自動(dòng)選擇最合適的位置顯示圖例,盡量不遮蓋圖形,此為默認(rèn)參數(shù)。用戶也可自行指定圖例的位置,例如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條線設(shè)置label,(1.05,1)圖例在Axes區(qū)域以外plt.legend(['$y1=x$','$y2=2*x$','$y3=3*x$','$y4=4*x$'],bbox_to_anchor=(1.05,1));第3節(jié)Axes屬性設(shè)置四、標(biāo)題為圖表添加標(biāo)題可以說明繪圖區(qū)域的核心信息。plt.title()函數(shù)用于設(shè)置圖像標(biāo)題,可以指定標(biāo)題的名稱、位置、顏色、字體、大小等。plt.title('標(biāo)題',fontsize=18,loc='center'),主要參數(shù)說明如下:loc:標(biāo)題位置,取值可為“l(fā)eft/right/center”,默認(rèn)居中。fontsize:字體大小,默認(rèn)12。va:垂直對齊,可選參數(shù)“center/top/bottom/baseline”。ha:水平對齊,可選參數(shù)“l(fā)eft/right/center”。rotation:旋轉(zhuǎn)角度,可選參數(shù)“vertical/horizontal”。backgroundcolor:背景顏色。bbox:標(biāo)題外框,用字典格式定義方框外形。plt.title('中間標(biāo)題',fontsize=16)plt.title('左邊標(biāo)題',loc='left',fontdict={'fontsize':'18','color':'r','family':'KaiTi'})plt.title('右邊標(biāo)題',loc='right',family='FangSong',fontsize=20,bbox=dict(facecolor='y',edgecolor='blue',alpha=0.3))#標(biāo)題外框第3節(jié)Axes屬性設(shè)置五、文本格式和注釋繪圖時(shí)可在圖形中添加適當(dāng)文本注釋,這樣圖形釋義更清晰。普通的不帶箭頭的注釋可使用函數(shù)plt.text()或plt.figtext()添加,帶箭頭的注釋使用函數(shù)plt.annotate()添加。plt.text()在當(dāng)前Axes中添加注釋文本,坐標(biāo)是相對Axes而言。plt.figtext()在當(dāng)前畫布上添加文字,坐標(biāo)是相對畫布而言。plt.axis([0,3,0,2])plt.figtext(0.15,0.9,'figtext()在畫布中注釋,坐標(biāo)相對當(dāng)前畫布',c='k',fontsize=16)plt.text(0.1,0.9,'text()在Axes中注釋,坐標(biāo)相對當(dāng)前Axes',c='b',fontsize=16)plt.text(0.2,1.6,'帶框注釋',fontsize=20,bbox=dict(fc='y',alpha=0.3))plt.text(2.1,1.5,'旋轉(zhuǎn)角度',fontsize=18,rotation=30)plt.text(0.3,0.4,'水印效果',fontsize=40,alpha=0.1)#透明度很高,水印效果plt.text(2.2,0.35,'上面',fontsize=40,c='r',zorder=2)#重疊時(shí),zorder值大的顯示在外側(cè)plt.text(2,0.2,'下面',fontsize=40,c='b',zorder=1)#zorder值小的在下面ax=plt.gca()#transform表明坐標(biāo)是相對ax標(biāo)準(zhǔn)化后的坐標(biāo)ax.text(0.5,0.6,'ax中央',transform=ax.transAxes,fontsize=18,ha='center')第3節(jié)Axes屬性設(shè)置五、文本格式和注釋帶箭頭的注釋使用函數(shù)plt.annotate()添加。x=np.linspace(-np.pi*2,np.pi*2,100)plt.plot(x,np.sin(x))plt.annotate('頂部',xy=(np.pi/2,1),#箭頭位置的坐標(biāo)

xytext=(40,0),#文字距離xy處的偏移像素點(diǎn)

textcoords='offsetpoints',#此參數(shù)表示文字距離箭頭的位置是相對偏移

va='center',arrowprops={'facecolor':'black'})plt.annotate('底部',xy=(-np.pi/2,-1),#箭頭位置的坐標(biāo)

xytext=(0,50),#文字位置xy處的偏移像素點(diǎn)

textcoords='offsetpoints',#相對箭頭處偏移

ha='center',arrowprops={'facecolor':'blue','shrink':0.1})#箭頭外觀第3節(jié)Axes屬性設(shè)置六、LaTeX標(biāo)記有時(shí)我們需要在圖形中顯示數(shù)學(xué)公式、上標(biāo)下標(biāo)、希臘字母等特殊符號,這時(shí)可使用LaTeX標(biāo)記語言。LaTeX是一種輕量級排版標(biāo)記語言,其標(biāo)記由"$\特殊字符串$"構(gòu)成。例如,"$y=x^2$"顯示x的平方,r"$\alpha$"顯示希臘字母α,r"$\frac{2}{3}$"顯示分?jǐn)?shù)2/3。一般而言,在“$文本$"內(nèi)的文本會以斜體形式輸出。特殊符號必須用"\"開頭,為避免"\"被錯(cuò)誤識別為轉(zhuǎn)義字符,需要在前面加上字母"r",表示python原生字符串,不需要轉(zhuǎn)義。見代碼文件"02.ipynb"。Python數(shù)據(jù)可視化ThankYou!Python數(shù)據(jù)可視化第3章Matplotlib圖形類別教師:xxx2024.07第1節(jié)連續(xù)型數(shù)據(jù)可視化第3章Matplotlib圖形類別第2節(jié)離散型數(shù)據(jù)可視化第3節(jié)比例數(shù)據(jù)可視化第4節(jié)關(guān)系數(shù)據(jù)可視化第1節(jié)連續(xù)型數(shù)據(jù)可視化折線圖(LineChart,亦稱曲線圖)是將數(shù)據(jù)點(diǎn)用直線連接而成的圖形。折線圖可用于展示連續(xù)型數(shù)據(jù)變量間的關(guān)系,直觀體現(xiàn)目標(biāo)變量y隨自變量x的變化趨勢,從而發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)聯(lián)性。折線圖的X軸通常是數(shù)量或時(shí)間,Y軸是數(shù)值,其基本框架如右圖所示。一、折線圖Matplotlib繪圖程序頭部幾乎都需要引用下面的語句,為節(jié)省篇幅,后續(xù)代碼段不再列出這些語句,默認(rèn)下述語句已包含。importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.family']='Simhei' #中文正常顯示plt.rcParams['axes.unicode_minus']=False #負(fù)號正常顯示第1節(jié)連續(xù)型數(shù)據(jù)可視化函數(shù)plt.plot()用于繪制折線圖,常用參數(shù)如下表所示。一、折線圖參數(shù)名描述參數(shù)名描述無形參名前兩組數(shù)據(jù)對應(yīng)x和y數(shù)據(jù)color顏色,簡寫為“c”linestyle線條類型,簡寫為“l(fā)s”linewidth線條粗細(xì),簡寫為“l(fā)w”marker散點(diǎn)類型alpha透明度,取值0~1之間plot函數(shù)常用參數(shù)表plt.plot([1,2,3],[3,5,4],c='r',lw=2)#折線,默認(rèn)不繪制點(diǎn)plt.plot(range(5),marker='o')#直線,marker散點(diǎn)類型'o'第1節(jié)連續(xù)型數(shù)據(jù)可視化如果想一次繪制多條線,可以用plot(x1,y1,x2,y2,x3,y3)的格式,系統(tǒng)自動(dòng)為每條線設(shè)置不同顏色,也可自行指定顏色。顏色參數(shù)如下表所示,顏色用英文單詞或縮寫字母表示均可。一、折線圖

color參數(shù)顏色縮寫指代顏色顏色縮寫指代顏色b藍(lán)色m品紅色g綠色y黃色r紅色k黑色c青色w白色第1節(jié)連續(xù)型數(shù)據(jù)可視化線條的顏色、數(shù)據(jù)點(diǎn)形狀和線型除了可用c、marker和ls這三個(gè)參數(shù)分別設(shè)置外,還可以將三個(gè)參數(shù)合并簡寫為一個(gè)格式字符串,如下圖所示。一、折線圖折線圖格式字符串示例x=np.arange(15)plt.plot(x,x*2,'gD-',x,x*3,'ro:',x,x*4,'y^--')第1節(jié)連續(xù)型數(shù)據(jù)可視化下面用折線圖展示兩種商品的銷售數(shù)量對比,代碼如下。一、折線圖plt.figure(figsize=(8,6))day=list(range(1,11))A=[314,359,205,1469,1829,1327,165,878,438,514]#A商品B=[963,1639,906,2027,3175,2485,4042,3501,3265,3200]#B商品plt.plot(day,A,'bD--',lw=2,label='A') #折線Aplt.plot(day,B,'gx:',lw=2,label='B')plt.legend(fontsize=16)plt.ylim(0,5000) #y軸數(shù)據(jù)范圍#數(shù)據(jù)點(diǎn)上方添加銷量,y+150調(diào)整標(biāo)注位置,ha/va水平和垂直對齊forx,yinzip(day,A):plt.text(x,y+150,y,ha='center',va='bottom',fontsize=14,c='b')forx,yinzip(day,B):plt.text(x,y+150,y,ha='center',va='bottom',fontsize=14,c='g')plt.xlabel('日期',fontsize=16)plt.ylabel('數(shù)量',fontsize=16)plt.title("商品A/B十日銷售數(shù)量對比圖",fontsize=18);第1節(jié)連續(xù)型數(shù)據(jù)可視化階梯圖是折線圖的y值持續(xù)保持在同一個(gè)值,直到發(fā)生變化跳躍到下一個(gè)值,其形狀類似階梯。plt.step()函數(shù)繪制階梯圖。二、階梯圖階梯圖的結(jié)構(gòu)第1節(jié)連續(xù)型數(shù)據(jù)可視化二、階梯圖x=[1,2,3,4,5,6,7,8]y=[31882,31993,31691,31475,30828,30595,31500,30552]plt.step(x,y,where='pre')plt.xticks(x,['1月','2月','3月','4月','5月','6月','7月','8月'])plt.grid(axis='y',ls=':',alpha=0.6)plt.xlabel('月份(單位:月)')plt.ylabel('金額(單位:元)')plt.title('2020年1-8月廣州房價(jià)變化階梯圖');第1節(jié)連續(xù)型數(shù)據(jù)可視化面積圖亦稱堆積折線圖,是將折線圖中折線與X軸之間的區(qū)域用顏色或紋理填充(填充區(qū)域的大小稱為“面積”),填充后的關(guān)注焦點(diǎn)會聚焦于色塊上。面積圖一般是多組時(shí)序數(shù)據(jù)的疊加,強(qiáng)調(diào)數(shù)量隨著時(shí)間而變化,引導(dǎo)人們關(guān)注總值的變化趨勢。面積圖上總的面積代表了所有數(shù)據(jù)的總和,各個(gè)層的面積表示各數(shù)據(jù)分量的和,這些堆疊起來的面積圖在觀察大數(shù)據(jù)的各個(gè)分量變化情況時(shí)格外有用。三、面積圖堆疊面積圖基本框架第1節(jié)連續(xù)型數(shù)據(jù)可視化三、面積圖x=np.arange(1,6)y1=[20,36,40,22,20]y2=[60,85,70,65,62]y3=[40,55,60,45,30]labels=['A','B','C']#自定義顏色,顏色由十六進(jìn)制RGB構(gòu)成colors=['#ac8e00','#fc8d99','#abcd05']plt.stackplot(x,y1,y2,y3,labels=labels,colors=colors)#面積圖plt.legend(fontsize=14)plt.title('面積圖',fontsize=18)第2節(jié)離散型數(shù)據(jù)可視化一、散點(diǎn)圖散點(diǎn)圖,顧名思義就是由一些散亂的點(diǎn)構(gòu)成的圖形。散點(diǎn)圖使用一系列的散點(diǎn)在平面直角坐標(biāo)系中展示(x,y)變量的分布情況。在統(tǒng)計(jì)學(xué)的回歸分析與預(yù)測中會頻繁使用散點(diǎn)圖。散點(diǎn)圖基本框架plt.scatter()繪制散點(diǎn)圖,格式為:plt.scatter(x,y,s=None,c=None,marker=None,cmap=None,edgecolors=None,**kwargs)第2節(jié)離散型數(shù)據(jù)可視化一、散點(diǎn)圖fromsklearn.datasetsimportload_iris#鳶尾花數(shù)據(jù)集iris=load_iris()#實(shí)例化數(shù)據(jù)集mark=['^','*','H']#點(diǎn)的形狀colors=['b','r','y']#點(diǎn)的顏色fork,vnameinenumerate(iris.target_names):plt.scatter(iris.data[k*50:(k+1)*50,0],iris.data[k*50:(k+1)*50,1],marker=mark[k],c=colors[k],s=30,label=vname)plt.xlabel("sepallength",fontsize=16)plt.ylabel("sepalwidth",fontsize=16)plt.title("sepallengthandwidthscatter",fontsize=18)plt.legend()第2節(jié)離散型數(shù)據(jù)可視化二、柱狀圖柱狀圖是以柱體高度或者長度的差異來反映數(shù)值變化的一種統(tǒng)計(jì)圖表。柱狀圖的水平x軸可以是類別型、序數(shù)型或數(shù)值型,數(shù)值y軸映射柱體的高度。函數(shù)plt.bar(x,height,width=0.8,bottom=None,align='center',*kwargs)用于繪制柱狀圖。柱狀圖基本框架第2節(jié)離散型數(shù)據(jù)可視化二、柱狀圖np.random.seed(7)sno=np.arange(1,11)#學(xué)號score=np.random.randint(55,100,10)#成績plt.ylim(0,105)plt.bar(sno,score,width=0.5,tick_label=sno)#柱狀圖forx,yinzip(sno,score):

#標(biāo)注數(shù)字plt.text(x,y+2,y,ha='center',va='bottom',fontsize=14)plt.xlabel('學(xué)號',fontsize=16)plt.ylabel('成績',fontsize=16);第2節(jié)離散型數(shù)據(jù)可視化三、堆積柱狀圖堆積柱狀圖是將同一類別的若干柱體上下堆積而成的。前面介紹的簇狀柱形圖是將同一類的柱體并列放置,堆積柱狀圖則將柱體上下堆疊。堆疊后即可對比單個(gè)數(shù)據(jù),又可對比每個(gè)類別的總和數(shù)據(jù)。示例參見代碼文件"03.ipynb"。堆積柱狀圖框架第3節(jié)比例數(shù)據(jù)可視化一、餅圖比例數(shù)據(jù)是日常生活中常見的一類數(shù)據(jù)。例如,選民的性別比例、地區(qū)比例和教育程度比例等。在比例數(shù)據(jù)中,我們關(guān)注各部分的占比,占比總和應(yīng)為100%。餅圖適合表現(xiàn)比例、份額類的數(shù)據(jù),清晰地呈現(xiàn)了各子類的占比情況。餅圖的基本框架如右圖所示,圓餅代表整體,每個(gè)扇形代表整體的一部分。餅圖不適合做數(shù)據(jù)的精確對比,因?yàn)閷θ搜蹃碚f,占比20%和25%的扇形區(qū)分度并不大。分類過多的數(shù)據(jù)也不適合使用餅圖,類別應(yīng)控制在10個(gè)以內(nèi)。plt.pie()用于繪制餅圖。餅圖基本框架第3節(jié)比例數(shù)據(jù)可視化一、餅圖x=[10,5,20,10,25,15]labels='波斯貓','加菲貓','短毛貓','貍花貓','孟加拉貓','其它'plt.pie(x,labels=labels,autopct='%.1f%%',textprops={'fontsize':12})#'%.1f%%'顯示百分比plt.legend(bbox_to_anchor=(1.05,1))第3節(jié)比例數(shù)據(jù)可視化二、分裂式餅圖餅圖每個(gè)扇形的尖端和圓心是重合的,如果想重點(diǎn)突出某一個(gè)扇形,可設(shè)置參數(shù)explode來實(shí)現(xiàn)。例如設(shè)置explode=(0,0.2,0,0,0,0)將第2個(gè)扇形突出了0.2的位置。突出的餅圖x=[10,5,20,10,25,15]labels='波斯貓','加菲貓','短毛貓','貍花貓','孟加拉貓','其它'explode=(0,0.2,0,0,0,0) #第2個(gè)扇形突出0.2patch,txt,pct=plt.pie(x,labels=labels,autopct='%.1f%%',explode=explode,textprops={'fontsize':12})forpinpatch: #patch是pie()命令返回的扇形組列表p.set_alpha(0.6)#設(shè)置每個(gè)扇形的透明度plt.legend(bbox_to_anchor=(1,1)) #右圖第3節(jié)比例數(shù)據(jù)可視化三、環(huán)形圖環(huán)形圖可視為餅圖的變形。環(huán)形圖看起來像一個(gè)面包圈,外圍不同顏色的弧形長度反映數(shù)值的差異,而餅圖則是通過扇形角度反映類別的占比。餅圖強(qiáng)調(diào)整體性,一般只繪制單個(gè)餅圖,只反映按一個(gè)指標(biāo)分類的占比。而環(huán)形圖可以疊加,同時(shí)反映多種分類情況的對比。環(huán)形圖框架第3節(jié)比例數(shù)據(jù)可視化三、環(huán)形圖兩種繪制方式:#方式1:兩個(gè)同心圓堆疊(視覺錯(cuò)覺)plt.pie([1,2,3])

#大圓,默認(rèn)半徑為1plt.pie([1,2,3],colors='w',radius=0.6)

#小圓、白色、半徑0.6#方式2:wedgeprops參數(shù)設(shè)置環(huán)

溫馨提示

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

評論

0/150

提交評論