????????Python 中有個非常實用的可視化庫 ——Matplotlib。數據可視化是數據分析中不可或缺的環節,而 Matplotlib 作為 Python 的 2D 繪圖庫,能幫助我們生成高質量的圖表,讓數據更直觀、更有說服力。接下來,我們將從 Matplotlib 的概述、圖表的基本設置到常用圖表的繪制,做個介紹。
一、Matplotlib 模塊的概述
1. 了解 Matplotlib 模塊
Matplotlib 是一個功能強大的 Python 2D 繪圖庫,它支持多種硬拷貝格式和跨平臺的交互式環境,能生成出版物級別的圖形。無論是簡單的折線圖、柱狀圖,還是復雜的熱力圖、雷達圖,Matplotlib 都能輕松應對。只需幾行代碼,就能將枯燥的數據轉化為清晰直觀的圖表,讓數據背后的規律和趨勢一目了然。
比如,我們可以用它繪制學生成績對比圖、銷售額趨勢圖、各省銷量占比圖等,這些圖表能幫助我們快速理解數據特征,為決策提供支持。
2. Matplotlib 模塊的安裝
在使用 Matplotlib 之前,我們需要先安裝它。安裝方法很簡單,主要有以下幾種:
- 使用 pip 工具安裝:打開 “命令提示符” 或 “Anaconda Prompt” 窗口,輸入命令pip install matplotlib,按回車即可完成安裝。
- 在 Pycharm 開發環境中安裝:通過 Pycharm 的包管理工具,搜索 “matplotlib” 并安裝,方便快捷。
安裝完成后,我們就可以在代碼中通過import matplotlib.pyplot as plt引入模塊,開始繪圖了。
3. 體驗 Matplotlib 可視化圖表
接下來,我們通過一個簡單的例子來體驗一下 Matplotlib 的繪圖功能。繪制第一張圖表只需三步:
- 引入 pyplot 模塊:import matplotlib.pyplot as plt
- 使用plot()方法繪制圖表:plt.plot([1, 2, 3, 4, 5])
- 使用show()函數顯示圖表:plt.show()
運行這段代碼,我們就能看到一個簡單的折線圖。在 Jupyter Notebook 中,同樣可以通過類似的代碼繪制圖表,非常便捷。
二、圖表的基本設置
要繪制出美觀且信息完整的圖表,需要對圖表進行一系列基本設置。下面我們介紹一些常用的設置方法。
1. 基本繪圖 ——plot()函數
plot()函數是 Matplotlib 中最基礎的繪圖函數,用于繪制折線圖。它的語法為:
matplotlib.pyplot.plot(x, y, format_string, **kwargs)
- x和y分別為 x 軸和 y 軸的數據。
- format_string用于控制曲線的格式,包括顏色、線條樣式和標記樣式。
- ** kwargs為其他鍵值參數,用于進一步設置曲線屬性。
例如,我們可以通過plt.plot(x, y, color='r', linestyle='--', marker='o')繪制一條紅色、虛線、帶圓形標記的折線。
其中,顏色可以通過字母(如'r'表示紅色、'b'表示藍色)、十六進制值(如'#FFFF00'表示黃色)或灰度值(如0.5)設置;線條樣式有實線('-')、雙劃線('--')、點劃線('-.')、虛線(':')等;標記樣式包括點(.)、實心圓('o')、三角('v' '^'等)、正方形('s')等。
2. 設置畫布 ——figure()函數
畫布是圖表的基礎,figure()函數用于創建自定義畫布,其語法為:
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)
- num:圖像的編號或名稱。
- figsize:指定畫布的寬和高(單位為英寸)。
- dpi:繪圖對象的分辨率,數值越大,畫布越清晰。
- facecolor和edgecolor:分別設置畫布的背景顏色和邊框顏色。
- frameon:是否顯示邊框,默認為True。
例如,plt.figure(figsize=(5, 3), facecolor='yellow')可以創建一個 5×3 英寸的黃色畫布。
3. 設置坐標軸 ——xlabel()、ylabel()等函數
坐標軸是圖表的重要組成部分,合理設置坐標軸能讓圖表更易讀。
- 坐標軸標題:xlabel()和ylabel()函數分別用于設置 x 軸和 y 軸的標題,例如plt.xlabel('2023年1月')、plt.ylabel('基礎體溫')。
- 坐標軸刻度:xticks()和yticks()函數用于設置坐標軸的刻度和標簽,例如plt.xticks(range(1, 15))將 x 軸刻度設置為 1 到 14 的連續數字。
- 坐標軸范圍:xlim()和ylim()函數用于設置坐標軸的取值范圍,例如plt.ylim(35, 45)將 y 軸范圍設置為 35 到 45。
此外,還可以通過axis()函數設置坐標軸的其他屬性,如axis('off')關閉坐標軸,axis('equal')使 x、y 軸長度一致等。
需要注意的是,Matplotlib 默認可能存在中文亂碼和負號顯示問題,我們可以通過以下代碼解決:
plt.rcParams['font.sans-serif'] = ['SimHei']? # 解決中文亂碼 plt.rcParams['axes.unicode_minus'] = False??? # 解決負號不顯示 |
4. 設置文本標簽 ——text()函數
text()函數用于在圖表的指定位置添加文本標簽,語法為:
matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
- x和y為文本標簽的坐標位置。
- s為文本內容。
- fontdict用于設置文本的字體樣式,如字體大小、顏色等。
例如,在體溫折線圖中,我們可以用text()函數為每個數據點添加具體的體溫值,讓數據更清晰。
5. 設置標題和圖例 ——title()、legend()函數
-** 標題 **:title()函數用于設置圖表的標題,語法為plt.title(label, fontdict=None, loc='center', pad=None,** kwargs),其中label為標題文本,loc控制標題的水平位置('center'、'left'、'right')。
- 圖例:legend()函數用于添加圖例,標識圖表中的不同數據系列。可以通過loc參數設置圖例的位置(如'upper right'表示右上角),通過ncol參數設置圖例的列數等。例如plt.legend(('基礎體溫',), loc='upper right')。
6. 添加注釋 ——annotate()函數
annotate()函數用于為圖表添加帶箭頭的注釋,突出顯示重要數據點,語法為:
plt.annotate(s, xy, *args, **kwargs)
- s為注釋文本。
- xy為被注釋的坐標點。
- xytext為注釋文本的坐標位置。
- arrowprops用于設置箭頭的樣式。
例如,在體溫折線圖中,我們可以用annotate()函數指示出最高體溫的位置,并添加 “最高體溫” 的注釋。
7. 設置網格線 ——grid()函數
grid()函數用于為圖表添加網格線,使數據的讀取更方便。例如plt.grid(color='0.5', linestyle='--', linewidth=1)可以添加灰色、虛線、線寬為 1 的網格線。通過axis參數可以控制網格線的方向,如axis='x'只顯示 x 軸網格線。
8. 設置參考線 ——axhline()、axvline()等函數
- axhline()和axvline()函數分別用于繪制水平和垂直參考線,無需指定起止點,默認貫穿整個圖表。
- hlines()和vlines()函數也用于繪制參考線,但需要指定起止點。
例如,plt.axhline(y=36.5, color='r', linestyle='--')可以添加一條 y=36.5 的紅色虛線作為水平參考線,表示體溫的平均值。
9. 選取范圍 ——axhspan()、axvspan()函數
這兩個函數用于在圖表中標記出特定的范圍:
- axhspan(ymin, ymax, facecolor, alpha)用于繪制水平選取范圍,ymin和ymax為 y 軸范圍的最小值和最大值。
- axvspan(xmin, xmax, facecolor, alpha)用于繪制垂直選取范圍,xmin和xmax為 x 軸范圍的最小值和最大值。
例如,axhspan(36.5, 37, facecolor='yellow', alpha=0.3)可以標記出體溫在 36.5 到 37 度之間的區域。
10. 圖表的布局 ——tight_layout()函數
tight_layout()函數用于自動調整圖表的布局,避免元素之間的重疊,使圖表更美觀。只需在顯示圖表前調用plt.tight_layout()即可。
11. 保存圖表 ——savefig()函數
savefig()函數用于將圖表保存為圖片文件,語法為plt.savefig('image.png'),其中'image.png'為保存的文件名和格式,支持 png、jpg、pdf 等多種格式。需要注意的是,savefig()函數應放在show()函數之前,否則可能保存為空圖片。
三、繪制常用的圖表
Matplotlib 支持多種類型的圖表,下面我們介紹一些常用圖表的繪制方法。
1. 散點圖 ——scatter()函數
散點圖用于展示兩個變量之間的關系,scatter()函數的語法為:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, ...)
- x和y為數據點的坐標。
- s為標記的大小,c為標記的顏色。
- marker為標記的樣式。
例如,我們可以用散點圖分析銷售收入與廣告費的相關性,通過觀察點的分布判斷兩者是否存在正相關或負相關關系。
2. 折線圖 ——plot()函數
折線圖常用于展示數據隨時間或其他連續變量的變化趨勢,我們可以用plot()函數繪制。例如,繪制學生語數外各科成績的折線圖,對比不同學生的成績差異和各科的整體表現。
3. 柱形圖 ——bar()函數
柱形圖用于比較不同類別數據的大小,bar()函數的語法為:
matplotlib.pyplot.bar(x, height, width, bottom=None, align='center', ...)
- x為 x 軸的類別數據。
- height為柱子的高度(y 軸數據)。
- width為柱子的寬度。
我們可以繪制簡單的柱形圖展示單一類別數據,也可以繪制多柱形圖對比不同平臺、不同年份的數據,例如 2016—2022 年各平臺圖書銷售額分析圖。
4. 直方圖 ——hist()函數
直方圖用于展示數據的分布情況,hist()函數的語法為:
matplotlib.pyplot.hist(x, bins=None, range=None, density=None, ...)
- x為要分析的數據集。
- bins為統計數據的區間分布。
- density為True時顯示頻率分布,False時顯示頻數分布。
例如,用直方圖分析學生數學成績的分布情況,觀察成績集中在哪個分數段。
5. 餅形圖 ——pie()函數
餅形圖用于展示各部分占總體的比例,pie()函數的語法為:
matplotlib.pyplot.pie(x, explode=None, labels=None, autopct=None, ...)
- x為各部分的比例數據。
- explode用于設置某部分離中心的距離,突出顯示該部分。
- labels為各部分的標簽。
- autopct用于設置百分比的顯示格式。
我們可以繪制基礎餅形圖、分裂餅形圖(突出某一部分)、帶陰影的餅形圖,還可以繪制環形圖和內嵌環形圖,例如分析 2023 年 1 月各省銷量占比情況。
6. 面積圖 ——stackplot()函數
面積圖用于展示數據的累積趨勢,stackplot()函數可以繪制標準面積圖和堆疊面積圖。堆疊面積圖能同時展示多個數據系列的變化趨勢和總體的變化,例如分析 2016—2022 年線上各平臺圖書銷售情況。
7. 箱形圖 ——boxplot()函數
箱形圖用于展示數據的分布特征,包括中位數、四分位數、異常值等,boxplot()函數的語法為:
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, ...)
通過箱形圖,我們可以快速判斷數據的分布是否對稱、是否存在異常值。例如,分析客人總消費數據中的異常值,異常值的判斷標準為:大于Q3 + 1.5(Q3 - Q1)或小于Q1 - 1.5(Q3 - Q1)(其中 Q1 為下四分位數,Q3 為上四分位數)。
8. 熱力圖 ——imshow()函數
熱力圖通過顏色的深淺展示數據的大小差異,適合展示矩陣形式的數據。例如,用熱力圖對比分析學生各科成績,顏色越深表示成績越高,直觀呈現學生的優勢和劣勢科目。
9. 雷達圖 ——polar()函數
雷達圖用于展示多個維度的數據,將各維度的數據繪制在極坐標上,形成多邊形,便于比較整體水平和各部分的關系。例如,分析男生女生各科平均成績的差異,判斷不同性別的學生在科目上的優勢差異。
10. 氣泡圖 ——scatter()函數
氣泡圖是散點圖的擴展,通過氣泡的大小表示第三個變量的值。例如,分析成交商品件數與訪客數的關系,氣泡越大表示銷售額越高。
11. 棉棒圖 ——stem()函數
棉棒圖用于繪制離散有序的數據,在每個 x 位置繪制從基線到 y 的垂直線,并在 y 處繪制標記。例如,展示某組離散數據的分布情況。
12. 誤差棒圖 ——errorbar()函數
誤差棒圖用于展示數據的誤差范圍,在折線圖或散點圖的基礎上添加誤差線。例如,繪制帶誤差的實驗數據,展示數據的不確定性。
總結
我們介紹了?Matplotlib 模塊的基礎知識,包括模塊的概述、安裝方法,圖表的基本設置(如畫布、坐標軸、標題、圖例等),以及 12 種常用圖表的繪制方法。在實際應用中,我們可以根據數據特點和分析需求選擇合適的圖表類型,并通過調整各種參數使圖表更美觀、信息更完整。