欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年04月17日 14:24:07   作者:wespten  
數(shù)據(jù)可視化是一種將龐雜抽象的數(shù)據(jù)轉(zhuǎn)化為直觀易懂的圖形的數(shù)據(jù)呈現(xiàn)技術,它能幫助我們快速把握數(shù)據(jù)的分布和規(guī)律,更加輕松地理解和探索信息,本文通過代碼圖片詳細介紹了Python數(shù)據(jù)可視化,感興趣的小伙伴可以參考閱讀

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

一、Matplotlib模塊

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

1、繪制基本圖表

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

1. 繪制柱形圖

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   x = [1, 2, 3, 4, 5, 6, 7, 8]
3   y = [60, 45, 49, 36, 42, 67, 40, 50]
4   plt.bar(x, y)
5   plt.show()

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

代碼運行結果如下圖所示:

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

演示代碼如下:

1   plt.bar(x, y, width=0.5, color='r')

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

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

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

  • 用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ù)字,如果值中有中文字符,則必須在繪制圖表前加上兩行代碼。

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['上海', '成都', '重慶', '深圳', '北京', '長沙', '南京', '青島']
5   y = [60, 45, 49, 36, 42, 67, 40, 50]
6   plt.bar(x, y, width=0.5, color='r')
7   plt.show()

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

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

代碼運行結果如下圖所示:

2. 繪制條形圖

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['上海', '成都', '重慶', '深圳', '北京', '長沙', '南京', '青島']
5   y = [60, 45, 49, 36, 42, 67, 40, 50]
6   plt.barh(x, y, height=0.5, color='r')  # 參數(shù)height用于設置條形的高度
7   plt.show()

代碼運行結果如下圖所示:

3. 繪制折線圖

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.plot(x, y, color='r', linewidth=2, linestyle='dashdot')
7   plt.show()

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

代碼運行結果如下圖所示: 

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

演示代碼如下:

1   plt.plot(x, y, color='r', linestyle='dashdot', linewidth=2, marker='*', markersize=10) 

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

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

代碼運行結果如下圖所示:

4. 繪制面積圖

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.stackplot(x, y, color='r')
7   plt.show()

代碼運行結果如下圖所示:

5. 繪制散點圖

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

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

1   import pandas as pd
2   import matplotlib.pyplot as plt
3   data = pd.read_excel('汽車速度和剎車距離表.xlsx')
4   x = data['汽車速度(km/h)']
5   y = data['剎車距離(m)']
6   plt.scatter(x, y, s=100, marker='o', color='r', edgecolor='k')
7   plt.show()

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

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

代碼運行結果如下圖所示:

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

演示代碼如下:

1   import pandas as pd
2   import matplotlib.pyplot as plt
3   from sklearn import linear_model
4   data = pd.read_excel('汽車速度和剎車距離表.xlsx')
5   x = data['汽車速度(km/h)']
6   y = data['剎車距離(m)']
7   plt.scatter(x, y, s=100, marker='o', color='r', edgecolor='k')
8   model = linear_model.LinearRegression().fit(x.values.reshape(-1, 1), y)
9   pred = model.predict(x.values.reshape(-1, 1))
10   plt.plot(x, pred, color='k', linewidth=3, linestyle='solid')
11   plt.show()

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

代碼運行結果如下圖所示:

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

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

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

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['上海', '成都', '重慶', '深圳', '北京', '青島', '南京']
5   y = [10, 45, 25, 36, 45, 56, 78]
6   plt.pie(y, labels=x, labeldistance=1.1, autopct='%.2f%%', pctdistance=1.5)
7   plt.show()

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

代碼運行結果如下圖所示:

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

演示代碼如下:

1   plt.pie(y, labels=x, labeldistance=1.1, autopct='%.2f%%', pctdistance=1.5, explode=[0, 0, 0, 0, 0, 0.3, 0], startangle=90, counterclock=False) 

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

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

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

代碼運行結果如下圖所示:

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

演示代碼如下:

1   plt.pie(y, labels=x, labeldistance=1.1, autopct='%.2f%%', pctdistance=1.5, wedgeprops={'width': 0.3, 'linewidth': 2, 'edgecolor': 'white'}) 

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

代碼運行結果如下圖所示:

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

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

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

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

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.subplot(2, 2, 1)
7   plt.pie(y, labels=x, labeldistance=1.1, startangle=90, counterclock=False)
8   plt.subplot(2, 2, 2)
9   plt.bar(x, y, width=0.5, color='r')
10   plt.subplot(2, 2, 3)
11   plt.stackplot(x, y, color='r')
12   plt.subplot(2, 2, 4)
13   plt.plot(x, y, color='r', linestyle='solid', linewidth=2, marker='o', markersize=10)
14   plt.show()

第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。

代碼運行結果如下圖所示:

2. 添加圖表元素

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.bar(x, y, width=0.6, color='r', label='銷售額(萬元)')
7   plt.title(label='銷售額對比圖', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 30}, loc='center')
8   plt.xlabel('月份', fontdict={'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad=20)
9   plt.ylabel('銷售額', fontdict={'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad=20)
10   plt.legend(loc='upper left', fontsize=15)
11   for a, b in zip(x, y):
12       plt.text(x=a, y=b, s=b, ha='center', va='bottom', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 20})
13   plt.show()

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

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

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

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

第12行代碼中的text()函數(shù)的功能是在圖表坐標系的指定位置添加文本。參數(shù)x和y分別表示文本的x坐標和y坐標;參數(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ù)標簽,則需配合使用循環(huán)。第11行代碼使用for語句構造了一個循環(huán),其中的zip()函數(shù)用于將列表x和y的元素逐個配對打包成一個個元組,即類似('1月', 50)、('2月', 45)、('3月', 65)……的形式,再通過循環(huán)變量a和b分別取出每個元組的元素,在第12代碼中傳遞給text()函數(shù),用于添加數(shù)據(jù)標簽。

代碼運行結果如下圖所示:

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

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.plot(x, y, color='r', linestyle='solid', linewidth=2)
7   plt.title(label='銷售額趨勢圖', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 30}, loc='center')
8   plt.xlabel('月份', fontdict={'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad= 20)
9   plt.ylabel('銷售額(萬元)', fontdict={'family': 'SimSun', 'color': 'k', 'size': 20}, labelpad=20)
10   plt.grid(b=True, color='r', linestyle='dotted', linewidth=1)
11   plt.show()

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

代碼運行結果如下圖所示:

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

演示代碼如下:

1   plt.grid(b=True, axis='y', color='r', linestyle='dotted', linewidth=1)

代碼運行結果如下圖所示:

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

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
3   plt.rcParams['axes.unicode_minus'] = False
4   x = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']
5   y = [50, 45, 65, 76, 75, 85, 55, 78, 86, 89, 94, 90]
6   plt.plot(x, y, color='r', linestyle='solid', linewidth=2, label='銷售額(萬元)')
7   plt.title(label='銷售額趨勢圖', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 30}, loc='center')
8   plt.legend(loc='upper left', fontsize=15)
9   for a,b in zip(x, y):
10       plt.text(a, b, b, ha='center', va='bottom', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 20})
11   plt.ylim(40, 100)
12   plt.show()

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

代碼運行結果如下圖所示:

技巧:切換坐標軸的顯示和隱藏。

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

演示代碼如下:

1   plt.axis('on')  # 顯示坐標軸
2   plt.axis('off')  # 隱藏坐標軸 

3、繪制高級圖表

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

1. 繪制氣泡圖

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

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

演示代碼如下:

1   import matplotlib.pyplot as plt
2   import pandas as pd
3   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
4   plt.rcParams['axes.unicode_minus'] = False
5   data = pd.read_excel('產(chǎn)品銷售統(tǒng)計.xlsx')
6   n = data['產(chǎn)品名稱']
7   x = data['銷售量(件)']
8   y = data['銷售額(元)']
9   z = data['毛利率(%)']
10   plt.scatter(x, y, s=z * 300, color='r', marker='o')
11   plt.xlabel('銷售量(件)', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 20}, labelpad=20)
12   plt.ylabel('銷售額(元)', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 20}, labelpad=20)
13   plt.title('銷售量、銷售額與毛利率關系圖', fontdict={'family': 'Microsoft YaHei', 'color': 'k', 'size': 30}, loc='center')
14   for a, b, c in zip(x, y, n):
15       plt.text(x=a, y=b, s=c, ha='center', va='center', fontsize=15, color='w')
16   plt.xlim(50, 600)
17   plt.ylim(2900, 11000)
18   plt.show()

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

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

代碼運行結果如下圖所示:

2. 繪制組合圖

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

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

演示代碼如下:

1   import pandas as pd
2   import matplotlib.pyplot as plt
3   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
4   plt.rcParams['axes.unicode_minus'] = False
5   data = pd.read_excel('銷售業(yè)績表.xlsx')
6   x = data['月份']
7   y1 = data['銷售額(萬元)']
8   y2 = data['同比增長率']
9   plt.bar(x, y1, color='c', label='銷售額(萬元)')
10   plt.plot(x, y2, color='r', linewidth=3, label='同比增長率')
11   plt.legend(loc='upper left', fontsize=15)
12   plt.show()

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

代碼運行結果如下圖所示:

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

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

9   plt.bar(x, y1, color='c', label='銷售額(萬元)')
10   plt.legend(loc='upper left', fontsize=15)
11   plt.twinx()
12   plt.plot(x, y2, color='r', linewidth=3, label='同比增長率')
13   plt.legend(loc='upper right', fontsize=15)
14   plt.show() 

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

代碼運行結果如下圖所示:

3. 繪制直方圖

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

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

1   import pandas as pd
2   import matplotlib.pyplot as plt
3   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
4   plt.rcParams['axes.unicode_minus'] = False
5   data = pd.read_excel('客戶年齡統(tǒng)計表.xlsx')
6   x = data['年齡']
7   plt.hist(x, bins=9)
8   plt.xlim(15, 60)
9   plt.ylim(0, 40)
10   plt.title('年齡分布直方圖', fontsize=20)
11   plt.xlabel('年齡')
12   plt.ylabel('人數(shù)')
13   plt.grid(b=True, linestyle='dotted', linewidth=1)
14   plt.show()

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

代碼運行結果如下圖所示:

4. 繪制雷達圖

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

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

演示代碼如下:

1   import pandas as pd
2   import numpy as np
3   import matplotlib.pyplot as plt
4   plt.rcParams['font.sans-serif'] = ['SimHei']
5   plt.rcParams['axes.unicode_minus'] = False
6   data = pd.read_excel('汽車性能指標分值統(tǒng)計表.xlsx')
7   data = data.set_index('性能評價指標')
8   data = data.T
9   data.index.name = '品牌'
10   def plot_radar(data, feature):
11       columns = ['動力性', '燃油經(jīng)濟性', '制動性', '操控穩(wěn)定性', '行駛平順性', '通過性', '安全性', '環(huán)保性', '方便性', '舒適性', '經(jīng)濟性', '容量性']
12       colors = ['r', 'g', 'y']
13       angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(columns), endpoint=False)
14       angles = np.concatenate((angles, [angles[0]]))
15       figure = plt.figure(figsize=(6, 6))
16       ax = figure.add_subplot(1, 1, 1, projection='polar')
17       for i, c in enumerate(feature):
18           stats = data.loc[c]
19           stats = np.concatenate((stats, [stats[0]]))
20           ax.plot(angles, stats, '-', linewidth=2, c=colors[i], label=str(c))
21           ax.fill(angles, stats, color=colors[i], alpha=0.75)
22       ax.legend(loc=4, bbox_to_anchor=(1.15, -0.07))
23       ax.set_yticklabels([2, 4, 6, 8, 10])
24       ax.set_thetagrids(angles * 180 / np.pi, columns, fontsize=12)
25       plt.show()
26       return figure
27   figure = plot_radar(data, ['A品牌', 'B品牌', 'C品牌'])

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

第11行代碼設置了在圖表中要展示的性能評價指標。第12行代碼用于設置每個品牌在圖表中的圖例顏色。第13行代碼根據(jù)要顯示的指標個數(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則用于確定圖例在坐標軸方向上的位置。第23行代碼用于設置要顯示的刻度線數(shù)據(jù)值。第24行代碼用于在圖表中添加數(shù)據(jù)標簽。

代碼運行結果如下圖所示:

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

1   figure = plot_radar(data, ['B品牌'])

代碼運行結果如下圖所示:

5. 繪制樹狀圖

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

演示代碼如下:

1   import squarify as sf
2   import matplotlib.pyplot as plt
3   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
4   plt.rcParams['axes.unicode_minus'] = False
5   x = ['上海', '北京', '重慶', '成都', '南京', '青島', '長沙', '武漢', '深圳']
6   y = [260, 45, 69, 800, 290, 360, 450, 120, 50]
7   colors = ['lightgreen', 'pink', 'yellow', 'skyblue', 'cyan', 'silver', 'lightcoral', 'orange', 'violet']
8   percent = ['11%', '2%', '3%', '33%', '12%', '15%', '18%', '5%', '2%']
9   chart = sf.plot(sizes=y, label=x, color=colors, value=percent, edgecolor='white', linewidth=2)
10   plt.title(label='城市銷售額分布及占比圖', fontdict={'family': 'KaiTi', 'color': 'k', 'size': 25})
11   plt.axis('off')
12   plt.show()

第1行和第2行代碼分別導入squarify模塊和Matplotlib模塊。第5行代碼指定圖表中每一個矩形的文字標簽。第6行代碼指定每一個矩形的大小。第7行代碼指定每一個矩形的填充顏色。第8行代碼指定每一個矩形的數(shù)值標簽。第9行代碼使用squarify模塊中的plot()函數(shù)繪制樹狀圖。

代碼運行結果如下圖所示:

6. 繪制箱形圖

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

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

演示代碼如下:

1   import pandas as pd
2   import matplotlib.pyplot as plt
3   plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
4   plt.rcParams['axes.unicode_minus'] = False
5   data = pd.read_excel('1月銷售統(tǒng)計表.xlsx')
6   x1 = data['成都']
7   x2 = data['上海']
8   x3 = data['北京']
9   x4 = data['重慶']
10   x5 = data['南京']
11   x = [x1, x2, x3, x4, x5]
12   labels = ['成都', '上海', '北京', '重慶', '南京']
13   plt.boxplot(x, vert=True, widths=0.5, labels=labels, showmeans=True)
14   plt.title('各地區(qū)1月銷售額箱形圖', fontsize=20)
15   plt.ylabel('銷售額(萬元)')
16   plt.show()

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

代碼運行結果如下圖所示:

箱形圖中的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)化為餅圖,在圓心角相同的情況下,以扇面長度展示指標大小。要繪制玫瑰圖,也要用到繪制柱形圖的bar()函數(shù)。

演示代碼如下:

1   import numpy as np
2   import pandas as pd
3   import matplotlib.pyplot as plt
4   plt.rcParams['font.sans-serif'] = ['SimHei']
5   plt.rcParams['axes.unicode_minus'] = False
6   index = ['0~0.5', '0.6~2.0', '2.1~4.0', '4.1~6.0']
7   columns = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW']
8   np.random.seed(0)
9   data = pd.DataFrame(np.random.randint(30, 300, (4, 16)), index=index, columns=columns)
10   N = 16
11   theta = np.linspace(0, 2 * np.pi, N, endpoint=False)
12   width = np.pi / N
13   labels = list(data.columns)
14   plt.figure(figsize=(6, 6))
15   ax = plt.subplot(1, 1, 1, projection='polar')
16   for i in data.index:
17       radius = data.loc[i]
18       ax.bar(theta, radius, width=width, bottom=0.0, label=i, tick_label=labels)
19   ax.set_theta_zero_location('N')
20   ax.set_theta_direction(-1)
21   plt.title('各方向風速頻數(shù)玫瑰圖', fontsize=20)
22   plt.legend(loc=4, bbox_to_anchor=(1.3, 0.2))
23   plt.show()

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

第10行代碼指定風速的方向數(shù)量為16。第11行代碼用于生成16個方向的角度值。第12行代碼用于計算扇面的寬度。第13行代碼用于定義坐標軸標簽為16個方向的名稱。

第14行代碼使用figure()函數(shù)創(chuàng)建一張高和寬都為6英寸的畫布。第15行代碼使用subplot()函數(shù)將整張畫布劃分為1行1列,并在第1個區(qū)域中繪圖。

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

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

代碼運行結果如下圖所示:

二、pyecharts模塊

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

1、圖表配置項

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

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

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

演示代碼如下:

1   from pyecharts.charts import Bar
2   x = ['連衣裙', '短褲', '運動套裝', '牛仔褲', '針織衫', '半身裙', '襯衫', '闊腿褲', '打底褲']
3   y1 = [36, 56, 60, 78, 90, 20, 50, 70, 10]
4   y2 = [16, 30, 50, 90, 45, 10, 60, 54, 40]
5   chart = Bar()
6   chart.add_xaxis(x)
7   chart.add_yaxis('分店A', y1)
8   chart.add_yaxis('分店B', y2)
9   chart.render('圖表配置項.html')

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

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

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

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

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

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

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

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

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

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

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

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

演示代碼如下:

1   from pyecharts import options as opts
2   chart.set_global_opts(title_opts=opts.TitleOpts(title='產(chǎn)品銷售額對比圖', pos_left='left'),
3       yaxis_opts=opts.AxisOpts(name='銷售業(yè)績(元)', name_location='end'),
4       xaxis_opts=opts.AxisOpts(name='產(chǎn)品', name_location='end'),
5       tooltip_opts=opts.TooltipOpts(is_show=True, formatter='{a}<br/>:{c}', background_color='black', border_width=15),
6       legend_opts=opts.LegendOpts(is_show=False),
7       toolbox_opts=opts.ToolboxOpts(is_show=True, orient='horizontal'),
8       visualmap_opts=opts.VisualMapOpts(is_show=True, type_='color', min_=0, max_=100, orient='vertical'),
9       datazoom_opts=opts.DataZoomOpts(is_show=True, type_='slider'))

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

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

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

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

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

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

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

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

演示代碼如下:

1   from pyecharts.globals import ThemeType
2   chart = Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))

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

設置主題后的圖表效果如下圖所示:

2、繪制漏斗圖

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

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

演示代碼如下:

1   import pyecharts.options as opts
2   from pyecharts.charts import Funnel
3   x = ['瀏覽商品', '放入購物車', '生成訂單', '支付訂單', '完成交易']
4   y = [1000, 900, 400, 360, 320]
5   data = [i for i in zip(x, y)]
6   chart = Funnel()
7   chart.add(series_name='人數(shù)', data_pair=data, label_opts=opts.LabelOpts(is_show=True, position='inside'), tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a}:{c}'))
8   chart.set_global_opts(title_opts=opts.TitleOpts(title='電商網(wǎng)站流量轉(zhuǎn)化漏斗圖', pos_left='center'), legend_opts=opts.LegendOpts(is_show=False))
9   chart.render('漏斗圖.html')

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

技巧:列表推導式。

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

1   data = []
2   for i in zip(x, y)
3       data.append(i)

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

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

  • 參數(shù)series_name用于指定系列名稱。
  • 參數(shù)data_pair用于指定系列數(shù)據(jù)值。
  • 參數(shù)label_opts用于設置標簽,標簽的配置項又有多個參數(shù):
  • 參數(shù)is_show用于控制是否顯示標簽,為True時表示顯示,為False時表示不顯示;
  • 參數(shù)position用于設置標簽的位置,這里設置為'inside',表示標簽顯示在圖表內(nèi)部,該參數(shù)的值還可以為'top'、'left'、'right'等。參數(shù)tooltip_opts用于設置提示框,提示框的配置項又有多個參數(shù):參數(shù)trigger用于設置提示框的觸發(fā)類型,其值一般設置為'item',表示當鼠標指針放置在數(shù)據(jù)系列上時就顯示提示框;參數(shù)formatter用于設置提示框的顯示內(nèi)容,這里的{a}代表系列名稱,{c}代表數(shù)據(jù)值。

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

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

演示代碼如下:

1   chart.add(series_name='人數(shù)', data_pair=data, sort_='ascending', gap=15, label_opts=opts.LabelOpts(is_show=True, position='inside'), tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a}:{c}'))

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

3、繪制漣漪特效散點圖

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

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

演示代碼如下:

1   import pandas as pd
2   import pyecharts.options as opts
3   from pyecharts.charts import EffectScatter
4   data = pd.read_excel('客戶購買力統(tǒng)計表.xlsx')
5   x = data['年齡'].tolist()
6   y = data['消費金額(元)'].tolist()
7   chart = EffectScatter()
8   chart.add_xaxis(x)
9   chart.add_yaxis(series_name='年齡,消費金額(元)', y_axis=y, label_opts=opts.LabelOpts(is_show=False), symbol_size=15)
10   chart.set_global_opts(title_opts=opts.TitleOpts(title='客戶購買力散點圖'), yaxis_opts=opts.AxisOpts(type_='value', name='消費金額(元)', name_location='middle', name_gap=40), xaxis_opts=opts.AxisOpts(type_='value', name='年齡', name_location='middle', name_gap=40), tooltip_opts=opts.TooltipOpts(trigger='item', formatter='{a}:{c}'))
11   chart.render('漣漪特效散點圖.html')

第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用于設置標記的大小。

第10行代碼中,參數(shù)title_opts用于設置圖表標題;參數(shù)yaxis_opts和xaxis_opts分別用于設置y坐標軸和x坐標軸,對應的配置項函數(shù)AxisOpts()的參數(shù)type_用于設置坐標軸的類型[這里設置為'value'(數(shù)值軸),還可以設置為'category'(類目軸)、'time'(時間軸)、'log'(對數(shù)軸)],參數(shù)name用于設置坐標軸標題,參數(shù)name_location用于設置坐標軸標題相對于軸線的位置(這里設置為居中顯示),參數(shù)name_gap用于設置坐標軸標題與軸線的間距(這里設置為40 px)。

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

4、繪制水球圖

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

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

演示代碼如下:

1   import pyecharts.options as opts
2   from pyecharts.charts import Liquid
3   a = 68
4   t = 100
5   chart = Liquid()
6   chart.add(series_name='商品A', data=[a / t])
7   chart.set_global_opts(title_opts=opts.TitleOpts(title='產(chǎn)品銷售業(yè)績達成率', pos_left='center'))
8   chart.render('水球圖.html')

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

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

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

演示代碼如下:

1   chart.add(series_name='商品A', data=[a / t], shape='rect') 

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

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

演示代碼如下:

1   import pyecharts.options as opts
2   from pyecharts.charts import Liquid
3   a1 = 68
4   a2 = 120
5   a3 = 37
6   t = 100
7   chart = Liquid()
8   chart.set_global_opts(title_opts=opts.TitleOpts(title='產(chǎn)品銷售業(yè)績達成率', pos_left='center'))
9   chart.add(series_name='商品A', data=[a1 / t], center=['20%', '50%'])
10   chart.add(series_name='商品B', data=[a2 / t], center=['50%', '50%'])
11   chart.add(series_name='商品C', data=[a3 / t], center=['80%', '50%'])
12   chart.render('水球圖.html')

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

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

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

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

5、繪制儀表盤

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

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

演示代碼如下:

1   import pyecharts.options as opts
2   from pyecharts.charts import Gauge
3   chart = Gauge()
4   chart.add(series_name='業(yè)務指標', data_pair=[('完成率', '62.25')], split_number=10, radius='80%', title_label_opts=opts.LabelOpts(font_size=30, color='red', font_family='Microsoft YaHei'))
5   chart.set_global_opts(legend_opts=opts.LegendOpts(is_show=False), tooltip_opts=opts.TooltipOpts(is_show=True, formatter='{a}<br/>:{c}%'))
6   chart.render('儀表盤.html')

第4行代碼中的參數(shù)split_number用于指定儀表盤的平均分割段數(shù),這里設置為10段;參數(shù)radius用于設置儀表盤的半徑,其值可以是百分數(shù)或數(shù)值;參數(shù)title_label_opts用于設置儀表盤內(nèi)標題文本標簽的配置項。

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

6、繪制詞云圖

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

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

演示代碼如下:

1   import pandas as pd
2   import pyecharts.options as opts
3   from pyecharts.charts import WordCloud
4   data = pd.read_excel('電影票房統(tǒng)計.xlsx')
5   name = data['電影名稱']
6   value = data['總票房(億元)']
7   data1 = [z for z in zip(name, value)]
8   chart = WordCloud()
9   chart.add('總票房(億元)', data_pair=data1, word_size_range=[6, 66])
10   chart.set_global_opts(title_opts=opts.TitleOpts(title='電影票房分析', title_textstyle_opts=opts.TextStyleOpts(font_size=30)), tooltip_opts=opts.TooltipOpts(is_show=True))
11   chart.render('詞云圖.html')

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

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

演示代碼如下:

1   chart.add('總票房(億元)', data_pair=data1, shape='star', word_size_range=[6, 66])

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

感興趣的朋友可以利用自然語言處理方法對一批文本進行分詞并統(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ù)為例。

演示代碼如下:

1   import tushare as ts
2   data = ts.get_k_data('000005', start='2010-01-01', end='2020-01-01')
3   print(data.head())

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

1            date  open  close  high   low     volume    code
2   0  2010-01-04  6.01   5.99  6.05  5.91  223582.22  000005
3   1  2010-01-05  5.95   6.20  6.32  5.83  644252.42  000005
4   2  2010-01-06  6.13   6.08  6.28  6.06  494034.08  000005
5   3  2010-01-07  6.03   5.83  6.07  5.82  314417.23  000005
6   4  2010-01-08  5.80   5.89  5.93  5.74  167892.49  000005

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

演示代碼如下:

1   data.to_excel('股價數(shù)據(jù).xlsx', index=False)

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

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

演示代碼如下:

1   import pandas as pd
2   from pyecharts import options as opts
3   from pyecharts.charts import Kline
4   data = pd.read_excel('股價數(shù)據(jù).xlsx')
5   x = data['date'].tolist()
6   open = data['open']
7   close = data['close']
8   lowest = data['low']
9   highest = data['high']
10   y = [z for z in zip(open, close, lowest, highest)]
11   chart = Kline()
12   chart.add_xaxis(x)
13   chart.add_yaxis('股價', y)
14   chart.set_global_opts(xaxis_opts=opts.AxisOpts(is_scale=True), yaxis_opts=opts.AxisOpts(is_scale=True, splitarea_opts=opts.SplitAreaOpts(is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1))), datazoom_opts=[opts.DataZoomOpts(type_='inside')], title_opts=opts.TitleOpts(title='股價走勢圖'))
15   chart.render('K線圖.html')

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

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

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

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

此外,將鼠標指針放置在數(shù)據(jù)系列上,會顯示鼠標指針所指向的那一天的詳細股價數(shù)據(jù),如下圖所示。 

以上就是Python數(shù)據(jù)可視化詳解的詳細內(nèi)容,更多關于Python數(shù)據(jù)可視化的資料請關注腳本之家其它相關文章!

相關文章

  • 深入探究Python中變量的拷貝和作用域問題

    深入探究Python中變量的拷貝和作用域問題

    這篇文章主要介紹了Python中變量的拷貝和作用域問題,包括一些賦值、引用問題,以及相關函數(shù)在Python2和3版本之間的不同,需要的朋友可以參考下
    2015-05-05
  • Python的joblib模型固化函數(shù)解析

    Python的joblib模型固化函數(shù)解析

    這篇文章主要介紹了Python的joblib模型固化函數(shù)解析,joblib提供了三個與對象序列化和模型固化相關的函數(shù)hash,dump,load,joblib.hash主要是為了提供一個numpy對象的hash方法,需要的朋友可以參考下
    2023-08-08
  • 跟老齊學Python之私有函數(shù)和專有方法

    跟老齊學Python之私有函數(shù)和專有方法

    這篇文章是老齊學Python系列文章的一篇,主要介紹了跟私有函數(shù)和專有方法,需要的朋友可以參考下
    2014-10-10
  • Python如何識別 MySQL 中的冗余索引

    Python如何識別 MySQL 中的冗余索引

    冗余索引也是一個非常重要的巡檢目,表中索引過多,會導致表空間占用較大,索引的數(shù)量與表的寫入速度與索引數(shù)成線性關系(微秒級),如果發(fā)現(xiàn)有冗余索引,建議立即審核刪除,這篇文章主要介紹了Python 識別 MySQL 中的冗余索引,需要的朋友可以參考下
    2022-10-10
  • Python 元組操作總結

    Python 元組操作總結

    這篇文章主要介紹了Python 元組操作總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • django開發(fā)教程之利用緩存文件進行頁面緩存的方法

    django開發(fā)教程之利用緩存文件進行頁面緩存的方法

    緩存相信對各位程序員們來說都不陌生,下面這篇文章主要給大家介紹了關于django開發(fā)教程之利用緩存文件進行頁面緩存的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友們可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-11-11
  • Python采用Django開發(fā)自己的博客系統(tǒng)

    Python采用Django開發(fā)自己的博客系統(tǒng)

    這篇文章主要為大家詳細介紹了Python采用Django開發(fā)自己的博客系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 一文教你如何用Python輕輕松松操作Excel,Word,CSV

    一文教你如何用Python輕輕松松操作Excel,Word,CSV

    數(shù)據(jù)處理是 Python 的一大應用場景,而 Excel 又是當前最流行的數(shù)據(jù)處理軟件。本文將為大家詳細介紹一下如何用Python輕輕松松操作Excel、Word、CSV,需要的可以參考一下
    2022-02-02
  • Python獲取svn版本信息

    Python獲取svn版本信息

    本文主要介紹了Python獲取svn版本信息,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • flask開啟多線程的具體方法

    flask開啟多線程的具體方法

    在本篇內(nèi)容里小編給大家整理的是一篇關于flask開啟多線程的具體方法,對此有需求的可以學習參考下。
    2020-08-08

最新評論