最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python數(shù)據(jù)可視化詳解

2023-03-30 10:40 作者:編程霸王花  | 我要投稿

數(shù)據(jù)可視化是一種將龐雜抽象的數(shù)據(jù)轉(zhuǎn)化為直觀易懂的圖形的數(shù)據(jù)呈現(xiàn)技術(shù),它能幫助我們快速把握數(shù)據(jù)的分布和規(guī)律,更加輕松地理解和探索信息。在當(dāng)今這個信息爆炸的時代,數(shù)據(jù)可視化越來越受重視。

一、Matplotlib模塊

Matplotlib是Python中最常用、最著名的數(shù)據(jù)可視化模塊,該模塊的子模塊pyplot包含大量用于繪制各類圖表的函數(shù)。

1、繪制基本圖表

日常工作中最基本的圖表有柱形圖、條形圖、折線圖、餅圖等,Matplotlib模塊針對這些圖表均提供了對應(yīng)的繪制函數(shù)。用于繪制圖表的數(shù)據(jù)可以直接使用提供的代碼,也可以通過pandas模塊的read_excel()函數(shù)從Excel工作簿中導(dǎo)入。

1.?繪制柱形圖

代碼文件:繪制柱形圖.py

柱形圖通常用于直觀地對比數(shù)據(jù),在實際工作中使用頻率很高。使用Matplotlib模塊中的bar()函數(shù)即可繪制柱形圖。

演示代碼如下:

第1行代碼導(dǎo)入Matplotlib模塊的子模塊pyplot,第2行和第3行代碼分別給出圖表的x軸和y軸的值,第4行代碼使用bar()函數(shù)繪制柱形圖,第5行代碼使用show()函數(shù)顯示繪制的圖表。

代碼運行結(jié)果如下圖所示:

如果想要改變柱形圖中每根柱子的寬度和顏色,可以通過設(shè)置bar()函數(shù)的參數(shù)width和color的值來實現(xiàn)。

演示代碼如下:

參數(shù)width用于設(shè)置柱子的寬度,其值并不表示一個具體的尺寸,而是表示柱子的寬度在圖表中所占的比例,默認(rèn)值為0.8。如果設(shè)置為1,則各個柱子會緊密相連;如果設(shè)置為大于1的數(shù),則各個柱子會相互交疊。

參數(shù)color用于設(shè)置柱子的填充顏色,上述代碼中的“r”是“red”的簡寫,表示將柱子的填充顏色設(shè)置為紅色。Matplotlib模塊支持多種格式定義的顏色,常用的格式有以下幾種:

  • 用顏色名的英文單詞或其簡寫定義的8種基礎(chǔ)顏色,具體見下表;


  • 用RGB值的浮點數(shù)元組定義的顏色,RGB值通常是用0~255的十進制整數(shù)表示的,如(51, 255, 0),將每個元素除以255,得到(0.2, 1.0, 0.0),就是Matplotlib模塊可以識別的RGB顏色;

  • 用RGB值的十六進制字符串定義的顏色,如'#33FF00',其與(51, 255, 0)是相同的RGB顏色,可自行搜索“十六進制顏色碼轉(zhuǎn)換工具”來獲取更多顏色。

在上面的代碼中,x軸和y軸的值都是數(shù)字,如果值中有中文字符,則必須在繪制圖表前加上兩行代碼。

演示代碼如下:

第4行代碼給出的x軸的值為中文字符串,而Matplotlib模塊在繪制圖表時默認(rèn)不支持顯示中文,因此必須加上第2行和第3行代碼。其中,第2行代碼通過設(shè)置字體為微軟雅黑來正常顯示中文內(nèi)容,第3行代碼用于解決負(fù)號顯示為方塊的問題。

第2行代碼中的“Microsoft YaHei”是微軟雅黑字體的英文名稱,如果想使用其他中文字體,可參考下面的字體名稱中英文對照表。

代碼運行結(jié)果如下圖所示:

2. 繪制條形圖

代碼文件:繪制條形圖.py

條形圖也常用于對比數(shù)據(jù),它可以看成將柱形圖的x軸和y軸調(diào)換位置的結(jié)果。使用Matplotlib模塊中的barh()函數(shù)可繪制條形圖。

演示代碼如下:

代碼運行結(jié)果如下圖所示:

3. 繪制折線圖

代碼文件:繪制折線圖.py

折線圖常用于顯示一段時間內(nèi)的數(shù)據(jù)趨勢。使用Matplotlib模塊中的plot()函數(shù)可繪制折線圖。

演示代碼如下:

第6行代碼中,參數(shù)color用于設(shè)置折線的顏色;參數(shù)linewidth用于設(shè)置折線的粗細(xì)(單位為“點”);參數(shù)linestyle用于設(shè)置折線的線型,可取的值如下表所示。

代碼運行結(jié)果如下圖所示:

通過設(shè)置參數(shù)marker和markersize可繪制帶數(shù)據(jù)標(biāo)記的折線圖。

演示代碼如下:

代碼中的marker= '*'表示設(shè)置數(shù)據(jù)標(biāo)記的樣式為五角星,markersize=10表示設(shè)置數(shù)據(jù)標(biāo)記的大小為10點。

參數(shù)marker常用的取值如下表所示:

代碼運行結(jié)果如下圖所示:

4. 繪制面積圖

代碼文件:繪制面積圖.py

面積圖實際上是折線圖的另一種表現(xiàn)形式,它利用折線與坐標(biāo)軸圍成的圖形來表達數(shù)據(jù)隨時間推移的變化趨勢。使用Matplotlib模塊中的stackplot()函數(shù)可繪制面積圖。

演示代碼如下:

代碼運行結(jié)果如下圖所示:

5. 繪制散點圖

代碼文件:繪制散點圖.py

散點圖常用于發(fā)現(xiàn)各變量之間的關(guān)系。使用Matplotlib模塊中的scatter()函數(shù)可繪制散點圖。演示代碼如下:

第3行代碼使用read_excel()函數(shù)導(dǎo)入工作簿“汽車速度和剎車距離表.xlsx”中的數(shù)據(jù),第4行指定x軸的值為工作簿中“汽車速度(km/h)”列的數(shù)據(jù),第5行代碼指定y軸的值為工作簿中“剎車距離(m)”列的數(shù)據(jù)。

第6行代碼中,參數(shù)s用于設(shè)置每個點的面積;參數(shù)marker用于設(shè)置每個點的樣式,取值和plot()函數(shù)的參數(shù)marker相同;參數(shù)color和edgecolor分別用于設(shè)置每個點的填充顏色和輪廓顏色。

代碼運行結(jié)果如下圖所示:
第3行代碼使用read_excel()函數(shù)導(dǎo)入工作簿“汽車速度和剎車距離表.xlsx”中的數(shù)據(jù),第4行指定x軸的值為工作簿中“汽車速度(km/h)”列的數(shù)據(jù),第5行代碼指定y軸的值為工作簿中“剎車距離(m)”列的數(shù)據(jù)。

第6行代碼中,參數(shù)s用于設(shè)置每個點的面積;參數(shù)marker用于設(shè)置每個點的樣式,取值和plot()函數(shù)的參數(shù)marker相同;參數(shù)color和edgecolor分別用于設(shè)置每個點的填充顏色和輪廓顏色。

代碼運行結(jié)果如下圖所示:

為便于推斷變量之間的相關(guān)性,可為散點圖添加一條線性趨勢線。

演示代碼如下:

第3行代碼導(dǎo)入Scikit-Learn模塊;第8行和第9行代碼使用Scikit-Learn模塊中的函數(shù)創(chuàng)建了一個線性回歸算法模型,用于根據(jù)汽車速度預(yù)測對應(yīng)的剎車距離;第10行代碼根據(jù)預(yù)測結(jié)果使用plot()函數(shù)繪制了一條線性趨勢線。

代碼運行結(jié)果如下圖所示:

6. 繪制餅圖和圓環(huán)圖

代碼文件:繪制餅圖和圓環(huán)圖.py

餅圖常用于展示各類別數(shù)據(jù)的占比。使用Matplotlib模塊中的pie()函數(shù)可繪制餅圖。演示代碼如下:

第6行代碼中,參數(shù)labels用于設(shè)置每一個餅圖塊的標(biāo)簽,參數(shù)labeldistance用于設(shè)置每一個餅圖塊的標(biāo)簽與中心的距離,參數(shù)autopct用于設(shè)置百分比數(shù)值的格式,參數(shù)pctdistance用于設(shè)置百分比數(shù)值與中心的距離。

代碼運行結(jié)果如下圖所示:

適當(dāng)設(shè)置參數(shù)explode的值,可以分離餅圖塊以突出顯示數(shù)據(jù)。

演示代碼如下:

代碼中的參數(shù)explode用于設(shè)置每一個餅圖塊與圓心的距離,其值通常是一個列表,列表的元素個數(shù)與餅圖塊的數(shù)量相同。這里設(shè)置為[0, 0, 0, 0, 0, 0.3, 0],第6個元素為0.3,其他元素均為0,表示將第6個餅圖塊(青島)分離,其他餅圖塊的位置不變。

參數(shù)startangle用于設(shè)置第1個餅圖塊的初始角度,這里設(shè)置為90°。

參數(shù)counterclock用于設(shè)置各個餅圖塊是逆時針排列還是順時針排列,為False時表示順時針排列,為True時表示逆時針排列。

代碼運行結(jié)果如下圖所示:

適當(dāng)設(shè)置參數(shù)wedgeprops的值,還能繪制出圓環(huán)圖。

演示代碼如下:

參數(shù)wedgeprops用于設(shè)置餅圖塊的屬性,其值為一個字典,字典中的元素則是餅圖塊各個屬性的名稱和值的鍵值對。上述代碼中的wedgeprops={'width': 0.3, 'linewidth': 2, 'edgecolor': 'white'}就表示設(shè)置餅圖塊的環(huán)寬(圓環(huán)的外圓半徑減去內(nèi)圓半徑)占外圓半徑的比例為0.3,邊框粗細(xì)為2,邊框顏色為白色。將餅圖塊的環(huán)寬占比設(shè)置為小于1的數(shù)(這里為0.3),就能繪制出圓環(huán)圖的效果。

代碼運行結(jié)果如下圖所示:

2、圖表的繪制和美化技巧

主要介紹一些圖表的繪制和美化技巧,包括在一張畫布中繪制多個圖表,以及為了讓圖表更美觀、更易于理解,為圖表添加圖表標(biāo)題、圖例、網(wǎng)格線等元素,并設(shè)置元素的格式,如網(wǎng)格線的線型和粗細(xì)、坐標(biāo)軸的刻度范圍等。

1. 在一張畫布中繪制多個圖表

代碼文件:在一張畫布中繪制多個圖表.py

Matplotlib模塊在繪制圖表時,默認(rèn)先建立一張畫布,然后在畫布中顯示繪制的圖表。如果想要在一張畫布中繪制多個圖表,可以使用subplot()函數(shù)將畫布劃分為幾個區(qū)域,然后在各個區(qū)域中分別繪制不同的圖表。

subplot()函數(shù)的參數(shù)為3個整型數(shù)字:第1個數(shù)字代表將整張畫布劃分為幾行;第2個數(shù)字代表將整張畫布劃分為幾列;第3個數(shù)字代表要在第幾個區(qū)域中繪制圖表,區(qū)域的編號規(guī)則是按照從左到右、從上到下的順序,從1開始編號。

演示代碼如下:

第6行代碼將整張畫布劃分為2行2列,并指定在第1個區(qū)域中繪制圖表。接著用第7行代碼繪制餅圖。

第8行代碼將整張畫布劃分為2行2列,并指定在第2個區(qū)域中繪制圖表。接著用第9行代碼繪制柱形圖。

第10行代碼將整張畫布劃分為2行2列,并指定在第3個區(qū)域中繪制圖表。接著用第11行代碼繪制面積圖。

第12行代碼將整張畫布劃分為2行2列,并指定在第4個區(qū)域中繪制圖表。接著用第13行代碼繪制折線圖。

subplot()函數(shù)的參數(shù)也可以寫成一個3位數(shù)的整型數(shù)字,如223。使用這種形式的參數(shù)時,劃分畫布的行數(shù)或列數(shù)不能超過10。

代碼運行結(jié)果如下圖所示:

2. 添加圖表元素

代碼文件:添加圖表元素.py

下面來講解如何為圖表添加圖表標(biāo)題、坐標(biāo)軸標(biāo)題、圖例、數(shù)據(jù)標(biāo)簽等圖表元素。

演示代碼如下:

第7行代碼中的title()函數(shù)用于添加圖表標(biāo)題。參數(shù)fontdict用于設(shè)置圖表標(biāo)題的文本格式,如字體、顏色、字號等;參數(shù)loc用于設(shè)置圖表標(biāo)題的位置,可取的值如下表所示。?

第8行代碼中的xlabel()函數(shù)用于添加x軸標(biāo)題,第9行代碼中的ylabel()函數(shù)用于添加y軸標(biāo)題。這兩個函數(shù)的第1個參數(shù)為標(biāo)題的文本內(nèi)容,參數(shù)fontdict用于設(shè)置標(biāo)題的文本格式,參數(shù)labelpad用于設(shè)置標(biāo)題與坐標(biāo)軸的距離。

第10行代碼中的legend()函數(shù)用于添加圖例,圖例的內(nèi)容由相應(yīng)的繪圖函數(shù)決定。例如,第6行代碼使用bar()函數(shù)繪制柱形圖,則legend()函數(shù)添加的圖例圖形為矩形色塊,圖例標(biāo)簽文本為bar()函數(shù)的參數(shù)label的值。legend()函數(shù)的參數(shù)loc用于設(shè)置圖例的位置,取值可以為字符串或整型數(shù)字,具體如下表所示。

需要注意的是,'right'的含義實際上與'center right'的含義相同,這個值是為了兼容舊版本的Matplotlib模塊而設(shè)立的。

第12行代碼中的text()函數(shù)的功能是在圖表坐標(biāo)系的指定位置添加文本。參數(shù)x和y分別表示文本的x坐標(biāo)和y坐標(biāo);參數(shù)s表示文本的內(nèi)容;參數(shù)ha是horizontal alignment的簡稱,表示文本在水平方向的顯示位置,有'center'、'right'、'left'三個值可選;參數(shù)va是vertical alignment的簡稱,表示文本在垂直方向的顯示位置,有'center'、'top'、'bottom'、'baseline'、'center_baseline'五個值可選。

參數(shù)ha和va取不同值時的繪制效果如下圖所示(上方為參數(shù)ha的效果示意,下方為參數(shù)va的效果示意),限于篇幅,這里不做展開講解,大家簡單了解即可。

text()函數(shù)每次只能添加一個文本,要給圖表的所有數(shù)據(jù)點添加數(shù)據(jù)標(biāo)簽,則需配合使用循環(huán)。第11行代碼使用for語句構(gòu)造了一個循環(huán),其中的zip()函數(shù)用于將列表x和y的元素逐個配對打包成一個個元組,即類似('1月', 50)、('2月', 45)、('3月', 65)……的形式,再通過循環(huán)變量a和b分別取出每個元組的元素,在第12代碼中傳遞給text()函數(shù),用于添加數(shù)據(jù)標(biāo)簽。

代碼運行結(jié)果如下圖所示:

3. 添加并設(shè)置網(wǎng)格線

代碼文件:添加并設(shè)置網(wǎng)格線.py

使用Matplotlib模塊中的grid()函數(shù)可以為圖表添加網(wǎng)格線。

演示代碼如下:

第10行代碼中,grid()函數(shù)的參數(shù)b設(shè)置為True,表示顯示網(wǎng)格線(默認(rèn)同時顯示x軸和y軸的網(wǎng)格線),參數(shù)linestyle和linewidth分別用于設(shè)置網(wǎng)格線的線型和粗細(xì)。

代碼運行結(jié)果如下圖所示:

如果只想顯示x軸或y軸的網(wǎng)格線,可以對grid()函數(shù)的參數(shù)axis進行設(shè)置。該參數(shù)的默認(rèn)值為'both',表示同時設(shè)置x軸和y軸的網(wǎng)格線,值為'x'或'y'時分別表示只設(shè)置x軸或y軸的網(wǎng)格線。

演示代碼如下:

代碼運行結(jié)果如下圖所示:

4. 調(diào)整坐標(biāo)軸的刻度范圍

代碼文件:調(diào)整坐標(biāo)軸的刻度范圍.py

使用Matplotlib模塊中的xlim()和ylim()函數(shù)可以分別調(diào)整x軸和y軸的刻度范圍。

演示代碼如下:

第11行代碼中使用ylim()函數(shù)設(shè)置y軸刻度的取值范圍為40~100。如果要調(diào)整x軸的刻度范圍,使用xlim()函數(shù)即可。

代碼運行結(jié)果如下圖所示:

技巧:切換坐標(biāo)軸的顯示和隱藏。

使用axis()函數(shù)可以切換坐標(biāo)軸的顯示和隱藏。

演示代碼如下:

3、繪制高級圖表

前面學(xué)習(xí)了常見圖表的繪制方法,以及圖表元素的添加和格式設(shè)置。接下來將繪制更加高級、專業(yè)的圖表,如氣泡圖、雷達圖、箱形圖等。

1.?繪制氣泡圖

代碼文件:繪制氣泡圖.py

氣泡圖是一種展示三個變量之間關(guān)系的圖表,它其實是在散點圖的基礎(chǔ)上升級改造而成的,在原有的x坐標(biāo)和y坐標(biāo)兩個變量的基礎(chǔ)上,引入第三個變量,并用氣泡的大小表示。因此,繪制氣泡圖要用到的函數(shù)就是繪制散點圖的scatter()函數(shù),只是參數(shù)的設(shè)置上有些區(qū)別。

演示代碼如下:

繪制氣泡圖的關(guān)鍵是設(shè)置scatter()函數(shù)的參數(shù)s的值,該參數(shù)表示每個點的面積。當(dāng)該參數(shù)為單個值時,表示所有點的面積相同,從而繪制出散點圖;當(dāng)該參數(shù)為一個序列類型的值時,就可以分別為每個點設(shè)置不同的面積,從而繪制出氣泡圖。

第10行代碼中將參數(shù)s設(shè)置為序列類型的變量z,并將序列中的每個值放大300倍,這是因為毛利率的值較小,如果不放大,氣泡會太小,導(dǎo)致圖表不美觀。第16行和第17行代碼適當(dāng)設(shè)置x軸和y軸的刻度范圍,讓氣泡顯示完全。

代碼運行結(jié)果如下圖所示:

2. 繪制組合圖

代碼文件:繪制組合圖.py

組合圖是指在一個坐標(biāo)系中繪制多張圖表,其實現(xiàn)方式也很簡單,在使用Matplotlib模塊中的函數(shù)繪制圖表時設(shè)置多組y坐標(biāo)值即可。

演示代碼如下:

第7行和第8行代碼分別設(shè)置了兩組y坐標(biāo)值,第9行代碼用第1組y坐標(biāo)值繪制了一個柱形圖,第10行代碼用第2組y坐標(biāo)值繪制了一個折線圖。

代碼運行結(jié)果如下圖所示:

從上圖可以看到,因為兩組y坐標(biāo)值的數(shù)量級相差比較大,所以繪制出的組合圖中,代表同比增長的折線圖近乎一條直線,對分析數(shù)據(jù)完全沒有幫助。此時需要使用twinx()函數(shù)為圖表設(shè)置次坐標(biāo)軸。

演示代碼如下(第1~8行與前面相同,從略):

第9行代碼繪制了一個柱形圖,第10行代碼在圖表左上角為柱形圖添加圖例;第11行代碼使用twinx()函數(shù)為圖表添加次坐標(biāo)軸;第12行代碼在次坐標(biāo)軸中繪制了一個折線圖,第13行代碼在圖表右上角為折線圖添加圖例。

代碼運行結(jié)果如下圖所示:

3. 繪制直方圖

代碼文件:繪制直方圖.py

直方圖用于展示數(shù)據(jù)的分布情況,使用Matplotlib模塊中的hist()函數(shù)可以繪制直方圖。演示代碼如下:

第7行代碼中,hist()函數(shù)的參數(shù)bins用于設(shè)置直方圖中數(shù)據(jù)分組的組數(shù),也就是柱子的個數(shù)。

代碼運行結(jié)果如下圖所示:

4. 繪制雷達圖

代碼文件:繪制雷達圖.py

雷達圖可以同時比較和分析多個指標(biāo)。該圖表可以看成一條或多條閉合的折線,因此,使用繪制折線圖的plot()函數(shù)也可以繪制雷達圖。

演示代碼如下:

第10~26行代碼自定義了一個函數(shù)plot_radar(),該函數(shù)有兩個參數(shù),其中data是用于繪制圖表的數(shù)據(jù),feature是要展示的一個或多個品牌。

第11行代碼設(shè)置了在圖表中要展示的性能評價指標(biāo)。第12行代碼用于設(shè)置每個品牌在圖表中的圖例顏色。第13行代碼根據(jù)要顯示的指標(biāo)個數(shù)對圓形進行等分。第14行代碼用于連接刻度線數(shù)據(jù)。第15行代碼使用figure()函數(shù)創(chuàng)建了一張高和寬都為6英寸的畫布。第16行代碼使用add_subplot()函數(shù)將整張畫布劃分為1行1列,并在第1個區(qū)域中繪圖。第17~21行代碼使用for語句和plot()函數(shù)為指定的各個品牌繪制雷達圖。

第22行代碼中的loc=4表示圖例顯示在右下角,參數(shù)bbox_to_anchor則用于確定圖例在坐標(biāo)軸方向上的位置。第23行代碼用于設(shè)置要顯示的刻度線數(shù)據(jù)值。第24行代碼用于在圖表中添加數(shù)據(jù)標(biāo)簽。

代碼運行結(jié)果如下圖所示:

如果只想展示單個品牌的指標(biāo),將第27行代碼改為下面的代碼即可。

代碼運行結(jié)果如下圖所示:

5. 繪制樹狀圖

代碼文件: 繪制樹狀圖.py
樹狀圖通過矩形的面積、排列和顏色直觀地展示多個項目的數(shù)據(jù)比例關(guān)系。要繪制該圖表,需結(jié)合使用Matplotlib模塊與squarify模塊。

演示代碼如下:

第1行和第2行代碼分別導(dǎo)入squarify模塊和Matplotlib模塊。第5行代碼指定圖表中每一個矩形的文字標(biāo)簽。第6行代碼指定每一個矩形的大小。第7行代碼指定每一個矩形的填充顏色。第8行代碼指定每一個矩形的數(shù)值標(biāo)簽。第9行代碼使用squarify模塊中的plot()函數(shù)繪制樹狀圖。
代碼運行結(jié)果如下圖所示:

6. 繪制箱形圖

代碼文件:繪制箱形圖.py

箱形圖是一種用于展示數(shù)據(jù)的分布情況的統(tǒng)計圖,因形狀如箱子而得名。使用Matplotlib模塊中的boxplot()函數(shù)可以繪制箱形圖。

演示代碼如下:

第6~11行代碼給出了用于繪制箱形圖的數(shù)據(jù)。第12行代碼給出了x坐標(biāo)值。第13行代碼中的參數(shù)vert用于設(shè)置箱形圖的方向,True表示縱向展示,F(xiàn)alse表示橫向展示;參數(shù)showmeans用于設(shè)置是否顯示均值,True表示顯示均值,F(xiàn)alse表示不顯示均值。

代碼運行結(jié)果如下圖所示:

箱形圖中的5條橫線和1個點所代表的含義如下:

  • 下限:指所有數(shù)據(jù)中的最小值;

  • 下四分位數(shù):又稱“第一四分位數(shù)”,指將所有數(shù)據(jù)從小到大排列后第25%的值;

  • 中位數(shù):又稱“第二四分位數(shù)”,指將所有數(shù)據(jù)從小到大排列后第50%的值;

  • 上四分位數(shù):又稱“第三四分位數(shù)”,指將所有數(shù)據(jù)從小到大排列后第75%的值;

  • 上限:指所有數(shù)據(jù)中的最大值;

  • 點:指所有數(shù)據(jù)的平均值。

7. 繪制玫瑰圖

代碼文件:繪制玫瑰圖.py

玫瑰圖可反映多個維度的數(shù)據(jù),它將柱形圖轉(zhuǎn)化為餅圖,在圓心角相同的情況下,以扇面長度展示指標(biāo)大小。要繪制玫瑰圖,也要用到繪制柱形圖的bar()函數(shù)。

演示代碼如下:

第6行代碼將風(fēng)速的分布設(shè)置為4個區(qū)間。第7行代碼設(shè)置了16個方向。第8行代碼中的seed()函數(shù)用于產(chǎn)生相同的隨機數(shù)。第9行代碼創(chuàng)建一個4行16列的DataFrame,其中的數(shù)據(jù)是30~300范圍內(nèi)的隨機數(shù),行標(biāo)簽為第6行代碼設(shè)置的風(fēng)速分布區(qū)間,列標(biāo)簽為第7行代碼設(shè)置的方向。

第10行代碼指定風(fēng)速的方向數(shù)量為16。第11行代碼用于生成16個方向的角度值。第12行代碼用于計算扇面的寬度。第13行代碼用于定義坐標(biāo)軸標(biāo)簽為16個方向的名稱。
第14行代碼使用figure()函數(shù)創(chuàng)建一張高和寬都為6英寸的畫布。第15行代碼使用subplot()函數(shù)將整張畫布劃分為1行1列,并在第1個區(qū)域中繪圖。

第18行代碼使用bar()函數(shù)繪制玫瑰圖中的16根柱子,也就是扇面,參數(shù)bottom用于設(shè)置每根柱子底部的位置,這里設(shè)置為0.0,表示從圓心開始繪制。

第19行代碼用于設(shè)置0°的方向為“N”,即北方。第20行代碼用于設(shè)置按逆時針方向排列各個柱子。

代碼運行結(jié)果如下圖所示:

二、pyecharts模塊

pyecharts是基于ECharts圖表庫開發(fā)的Python第三方模塊。ECharts是一個純JavaScript的商業(yè)級圖表庫,兼容當(dāng)前絕大部分瀏覽器,能夠創(chuàng)建類型豐富、精美生動、可交互、可高度個性化定制的數(shù)據(jù)可視化效果。pyecharts則在Python與ECharts之間搭建起一座橋梁,讓Python用戶也能使用ECharts的強大功能。

1、圖表配置項

代碼文件:圖表配置項.py

pyecharts模塊使用命令“pip install pyecharts”即可安裝。使用該模塊繪制圖表之前,首先要導(dǎo)入該模塊,導(dǎo)入語句通常寫成“from pyecharts.charts import 圖表類型關(guān)鍵詞”。導(dǎo)入模塊后,給出用于繪制圖表的數(shù)據(jù),即可繪制圖表。

下面以繪制柱形圖為例,講解pyecharts模塊的基本用法。

演示代碼如下:

第1行代碼導(dǎo)入pyecharts模塊中的Bar()函數(shù),該函數(shù)用于繪制柱形圖。如果要繪制其他類型的圖表,在此導(dǎo)入相應(yīng)的圖表函數(shù)即可。

第2~4行代碼給出圖表的x坐標(biāo)和y坐標(biāo)的值,其中y坐標(biāo)值有兩個數(shù)據(jù)系列。

第6行代碼中的add_xaxis()函數(shù)用于添加x坐標(biāo)值。第7行和第8行代碼中的add_yaxis()函數(shù)用于依次添加兩個系列的y坐標(biāo)值,該函數(shù)的第1個參數(shù)用于設(shè)置系列名稱,第2個參數(shù)用于設(shè)置系列數(shù)據(jù)。

第9行代碼中的render()函數(shù)用于將繪制的圖表保存為一個網(wǎng)頁文件,此處保存為代碼文件所在文件夾下的“圖表配置項.html”文件,保存路徑和文件名可以根據(jù)實際需求更改。

運行上面的代碼后,在代碼文件所在文件夾下會生成一個名為“圖表配置項.html”的網(wǎng)頁文件。雙擊該文件,可在默認(rèn)瀏覽器中看到如下圖所示的柱形圖。

該柱形圖是靜態(tài)的,并且沒有圖表標(biāo)題、坐標(biāo)軸標(biāo)題等元素。如果想要繪制個性化的動態(tài)圖表,可對圖表元素進行配置。在pyecharts模塊中,圖表的一切元素皆可配置,用于配置圖表元素的選項稱為配置項。配置項分為全局配置項和系列配置項兩種,這里主要介紹全局配置項。?


全局配置項可通過pyecharts模塊中的set_global_opts()函數(shù)進行設(shè)置。使用該函數(shù)設(shè)置全局配置項時,要先導(dǎo)入pyecharts模塊的options子模塊。

全局配置項有很多內(nèi)容,每個配置項對應(yīng)options子模塊中的一個函數(shù)。

常見圖表元素對應(yīng)的配置項函數(shù)如下表所示:

每個配置項對應(yīng)的函數(shù)有很多參數(shù),下面以圖例的配置項對應(yīng)的LegendOpts()函數(shù)為例,簡單介紹配置項函數(shù)的參數(shù),具體見下表。

如果想了解更多配置項的知識,可以查閱pyecharts模塊的官方文檔,網(wǎng)址為https://pyecharts.org/#/zh-cn/global_options。

下面通過設(shè)置全局配置項,為前面繪制的柱形圖添加圖表標(biāo)題、縮放滑塊、坐標(biāo)軸標(biāo)題等元素。

演示代碼如下:

在上面的代碼中,配置項TitleOpts()函數(shù)為圖表添加了圖表標(biāo)題,并設(shè)置圖表標(biāo)題位于左側(cè)。
配置項AxisOpts()函數(shù)為圖表分別添加了y軸標(biāo)題“銷售業(yè)績(元)”和x軸標(biāo)題“產(chǎn)品”,并設(shè)置坐標(biāo)軸標(biāo)題位于軸的尾部。

配置項TooltipOpts()函數(shù)設(shè)置了圖表的提示框,也就是將鼠標(biāo)指針放在圖表的數(shù)據(jù)系列上時彈出的提示信息。

配置項LegendOpts()函數(shù)設(shè)置了不顯示圖例。?

配置項ToolboxOpts()函數(shù)設(shè)置了工具箱以橫向布局顯示在圖表中。

配置項VisualMapOpts()函數(shù)設(shè)置了開啟視覺映射,并設(shè)置了視覺映射的顏色、最小值、最大值及布局方式。

配置項DataZoomOpts()函數(shù)設(shè)置了開啟區(qū)域縮放功能,并設(shè)置其類型為滑塊。

運行代碼后,打開生成的網(wǎng)頁文件,可看到如下圖所示的柱形圖。拖動下方的縮放滑塊,可動態(tài)展示部分產(chǎn)品的銷售額對比情況。

pyecharts模塊還內(nèi)置了多種風(fēng)格的圖表主題,讓用戶可以更輕松地設(shè)置圖表的外觀。使用方法是先導(dǎo)入pyecharts模塊中的ThemeType對象,然后在圖表的函數(shù)中使用InitOpts()函數(shù)設(shè)置初始化配置項。

演示代碼如下:

第2行代碼在Bar()函數(shù)中使用InitOpts()函數(shù)設(shè)置圖表的主題風(fēng)格為“DARK”,還可以設(shè)置為“LIGHT”“CHALK”“ESSOS”等。

設(shè)置主題后的圖表效果如下圖所示:

2、繪制漏斗圖

代碼文件:繪制漏斗圖.py

漏斗圖用于呈現(xiàn)從上到下的幾個階段的數(shù)據(jù),各階段的數(shù)據(jù)逐漸變小。使用pyecharts模塊中的Funnel()函數(shù)可以快速繪制漏斗圖。下面用該函數(shù)繪制一個漏斗圖,展示電商網(wǎng)站上從瀏覽商品到完成交易各階段人數(shù)的變化。

演示代碼如下:

第5行代碼先用zip()函數(shù)將列表x和y中對應(yīng)的元素配對打包成一個個元組,然后將這些元組組成一個列表。這一操作必不可少,因為Funnel()函數(shù)要求圖表的數(shù)據(jù)格式必須是由元組組成的列表,即[(key1, value1), (key2, value2), (……)]的格式。

技巧:列表推導(dǎo)式。

第5行代碼使用的生成列表的語法格式稱為列表推導(dǎo)式,它等同于如下代碼:

列表推導(dǎo)式能讓代碼變得簡明扼要,它同樣適用于字典、集合等可迭代的數(shù)據(jù)結(jié)構(gòu)。

第7行代碼中,add()函數(shù)的各個參數(shù)的作用如下:

  • 參數(shù)series_name用于指定系列名稱。

  • 參數(shù)data_pair用于指定系列數(shù)據(jù)值。

  • 參數(shù)label_opts用于設(shè)置標(biāo)簽,標(biāo)簽的配置項又有多個參數(shù):參數(shù)is_show用于控制是否顯示標(biāo)簽,為True時表示顯示,為False時表示不顯示;參數(shù)position用于設(shè)置標(biāo)簽的位置,這里設(shè)置為'inside',表示標(biāo)簽顯示在圖表內(nèi)部,該參數(shù)的值還可以為'top'、'left'、'right'等。

  • 參數(shù)tooltip_opts用于設(shè)置提示框,提示框的配置項又有多個參數(shù):參數(shù)trigger用于設(shè)置提示框的觸發(fā)類型,其值一般設(shè)置為'item',表示當(dāng)鼠標(biāo)指針放置在數(shù)據(jù)系列上時就顯示提示框;參數(shù)formatter用于設(shè)置提示框的顯示內(nèi)容,這里的{a}代表系列名稱,{c}代表數(shù)據(jù)值。

運行代碼后,得到的圖表效果如下圖所示:

如果想要讓漏斗圖倒立,可在add()函數(shù)中使用參數(shù)sort_調(diào)整數(shù)據(jù)圖形的排列方向。此外,還可以在add()函數(shù)中使用參數(shù)gap設(shè)置數(shù)據(jù)圖形的間距。

演示代碼如下:

運行代碼后,得到的圖表效果如下圖所示。

3、繪制漣漪特效散點圖

代碼文件:繪制漣漪特效散點圖.py

前面介紹過使用Matplotlib模塊中的plot()函數(shù)繪制散點圖的方法,用這種方法繪制的散點圖是靜態(tài)的。使用pyecharts模塊中的EffectScatter()函數(shù)則能繪制帶有漣漪特效的散點圖。

演示代碼如下:

第5行和第6行代碼從DataFrame中選取數(shù)據(jù)后,使用tolist()函數(shù)將選取的數(shù)據(jù)轉(zhuǎn)換為列表格式,這是因為pyecharts模塊只支持Python原生的數(shù)據(jù)類型,包括int、float、str、bool、dict、list。
第9行代碼中,add_yaxis()函數(shù)的參數(shù)label_opts與add()函數(shù)的同名參數(shù)含義相同,參數(shù)symbol_size用于設(shè)置標(biāo)記的大小。
第10行代碼中,參數(shù)title_opts用于設(shè)置圖表標(biāo)題;參數(shù)yaxis_opts和xaxis_opts分別用于設(shè)置y坐標(biāo)軸和x坐標(biāo)軸,對應(yīng)的配置項函數(shù)AxisOpts()的參數(shù)type_用于設(shè)置坐標(biāo)軸的類型[這里設(shè)置為'value'(數(shù)值軸),還可以設(shè)置為'category'(類目軸)、'time'(時間軸)、'log'(對數(shù)軸)],參數(shù)name用于設(shè)置坐標(biāo)軸標(biāo)題,參數(shù)name_location用于設(shè)置坐標(biāo)軸標(biāo)題相對于軸線的位置(這里設(shè)置為居中顯示),參數(shù)name_gap用于設(shè)置坐標(biāo)軸標(biāo)題與軸線的間距(這里設(shè)置為40 px)。

運行代碼后,得到的圖表效果如下圖所示:

4、繪制水球圖

代碼文件:繪制水球圖.py

水球圖適合用于展示單個百分?jǐn)?shù)。使用pyecharts模塊中的Liquid()函數(shù)可以繪制水球圖,通過非常簡單的配置就能獲得酷炫的展示效果。

演示代碼如下:

第3行和第4行代碼分別給出產(chǎn)品的實際銷售業(yè)績和目標(biāo)銷售業(yè)績。第6行代碼中,add()函數(shù)的參數(shù)data用于指定系列數(shù)據(jù),本案例要展示銷售業(yè)績達成率,使用實際銷售業(yè)績除以目標(biāo)銷售業(yè)績即可。需要注意的是,參數(shù)data的格式必須為一個列表。

運行代碼后,得到的圖表效果如下圖所示:


Liquid()函數(shù)繪制的水球圖的默認(rèn)形狀為圓形,可以通過設(shè)置參數(shù)shape的值來改變水球圖的形狀。該參數(shù)的值可以為'circle'、'rect'、'roundRect'、'triangle'、'diamond'、'pin'、'arrow',對應(yīng)的形狀分別為圓形、矩形、圓角矩形、三角形、菱形、地圖圖釘、箭頭。

演示代碼如下:

運行代碼后,得到的圖表效果如下圖所示:

如果希望在一個水球圖中繪制多個水球,可以通過設(shè)置add()函數(shù)的參數(shù)center來實現(xiàn)。

演示代碼如下:

第3~6行代碼分別指定了3個產(chǎn)品的實際銷售業(yè)績和相同的目標(biāo)銷售業(yè)績。

第7行代碼創(chuàng)建了一個水球圖。第8行代碼為水球圖添加了居中顯示的圖表標(biāo)題。

第9~11行代碼使用add()函數(shù)依次在水球圖中繪制了3個水球。函數(shù)的參數(shù)center用于指定水球的中心點在圖表中的位置。

運行代碼后,得到的圖表效果如下圖所示:

5、繪制儀表盤

代碼文件:繪制儀表盤.py

儀表盤同水球圖一樣,也適合用于展示單個百分?jǐn)?shù)。使用pyecharts模塊中的Gauge()函數(shù)可以繪制儀表盤。

演示代碼如下:

6、繪制詞云圖

代碼文件:繪制詞云圖.py

詞云圖是一種用于展示高頻關(guān)鍵詞的圖表,它通過文字、顏色、圖形的搭配,產(chǎn)生極具沖擊力的視覺效果。使用pyecharts模塊中的WordCloud()函數(shù)可以繪制詞云圖。

演示代碼如下:

第9行代碼中,add()函數(shù)的參數(shù)word_size_range用于設(shè)置詞云圖中每個詞的字號的變化范圍。運行代碼后,得到的圖表效果如下圖所示。

與水球圖類似,通過設(shè)置參數(shù)shape的值可以改變詞云圖的外形輪廓,可取的值有'circle'、'cardioid'、'diamond'、'triangle-forward'、'triangle'、'pentagon'、'star'。

演示代碼如下:

運行代碼后,得到的圖表效果如下圖所示:

感興趣的朋友可以利用自然語言處理方法對一批文本進行分詞并統(tǒng)計詞頻,再使用詞頻數(shù)據(jù)繪制詞云圖。?

7、繪制K線圖

代碼文件:繪制K線圖.py

K線圖用于反映股價信息,又稱蠟燭圖、股價圖。所有的K線圖都是圍繞開盤價、收盤價、最低價和最高價這4個數(shù)據(jù)展開的。使用pyecharts模塊中的Kline()函數(shù)可以繪制K線圖

利用Tushare模塊獲取股價數(shù)據(jù),這里以獲取股票代碼為000005的股票從2010年1月1日到2020年1月1日的日K線級別的股價數(shù)據(jù)為例。

演示代碼如下:

代碼運行結(jié)果如下(date列為交易日期,open列為開盤價,close列為收盤價,high列為最高價,low列為最低價,volume列為成交量,code列為股票代碼):

將獲取的股價數(shù)據(jù)寫入Excel工作簿。

演示代碼如下:

運行代碼后,在代碼文件所在文件夾生成一個名為“股價數(shù)據(jù).xlsx”的Excel工作簿。打開該工作簿,可看到獲取的股價數(shù)據(jù),如下圖所示。

完成股價數(shù)據(jù)的獲取后,就可以使用Kline()函數(shù)繪制K線圖了。

演示代碼如下:

第6~9行代碼分別指定了用于繪制K線圖的開盤價、收盤價、最低價、最高價數(shù)據(jù)。第10行代碼將這些數(shù)據(jù)打包成由元組組成的列表,作為y坐標(biāo)的值。需要注意的是,y坐標(biāo)的值一定要按開盤價、收盤價、最低價、最高價的順序排列。

第14行代碼中的SplitAreaOpts()是系列配置項中的分隔區(qū)域配置項,用于設(shè)置在圖表數(shù)據(jù)系列的背景區(qū)域中是否顯示顏色交錯填充的分割效果,參數(shù)opacity用于設(shè)置不透明度,取值范圍為0~1,為0時完全透明,為1時完全不透明。

運行代碼后,得到的圖表效果如下圖所示:

第14行代碼中還使用配置項DataZoomOpts()函數(shù)為圖表添加了區(qū)域縮放滑塊。曾使用DataZoomOpts()函數(shù)為柱形圖添加了顯示在圖表底部的滑塊,這里添加的滑塊則是隱藏在圖表中的。用鼠標(biāo)左右拖動圖表,可以看到不同時期的數(shù)據(jù);將鼠標(biāo)指針放置在圖表中,然后滑動鼠標(biāo)滾輪,可看到圖表會隨著滾輪的滑動而縮放。

此外,將鼠標(biāo)指針放置在數(shù)據(jù)系列上,會顯示鼠標(biāo)指針?biāo)赶虻哪且惶斓脑敿?xì)股價數(shù)據(jù),如下圖所示。?

最后
??? 小伙伴們學(xué)習(xí)編程,有時候不知道怎么學(xué),從哪里開始學(xué)。掌握了基本的一些語法或者做了兩個案例后,不知道下一步怎么走,不知道如何去學(xué)習(xí)更加高深的知識。

那么對于這些小伙伴們,我準(zhǔn)備了大量的視頻教程,PDF電子書籍,以及源代碼!
只要+up主威信wangkeit1備注“B站”就可以白嫖領(lǐng)取啦!


Python數(shù)據(jù)可視化詳解的評論 (共 條)

分享到微博請遵守國家法律
临夏市| 永仁县| 壤塘县| 兖州市| 安泽县| 旬邑县| 丰顺县| 绵竹市| 奉新县| 达孜县| 桑植县| 双峰县| 全州县| 贵阳市| 高台县| 于田县| 临沧市| 新乡市| 惠安县| 牙克石市| 东方市| 永州市| 瑞金市| 盱眙县| 容城县| 仁寿县| 股票| 武定县| 溧水县| 青铜峡市| 策勒县| 桑日县| 铁岭市| 济宁市| 建宁县| 澎湖县| 天等县| 车险| 南安市| 广宗县| 鄂伦春自治旗|