Python 利用pandas 和 matplotlib繪製柱狀圖

2023-10-28 12:01:40

當你需要展示資料時,圖表是一個非常有用的工具。Python 中的 pandas 和 matplotlib 庫提供了豐富的功能,可以幫助你輕鬆地繪製各種型別的圖表。本文將介紹如何使用這兩個庫,繪製一個店鋪銷售數量的柱狀圖,並新增各種元素,如資料標籤、圖例、格線等。

準備工作

在開始之前,你需要安裝 pandas 和 matplotlib 庫。如果你還沒有安裝,可以使用以下命令進行安裝

pip install pandas matplotlib

另外,為了在圖表中顯示中文,你需要下載並安裝中文字型檔案。這裡我們使用宋體,你可以替換為其他中文字型。下載後,將字型檔案路徑替換到程式碼中的 font 變數中

# 設定中文字型
font = FontProperties(fname='C:\\Windows\\Fonts\\simhei.ttf', size=12)  # 替換為你的中文字型檔案路徑和字型大小

資料準備

我們假設有一個 Excel 檔案,其中包含多個店鋪的銷售資料。每個店鋪有多個訂單,每個訂單有一個銷售數量。我們需要對每個店鋪的銷售數量進行求和,並按照銷售數量降序排列。以下是資料準備的程式碼:

import pandas as pd

# 從Excel檔案中讀取資料
data = pd.read_excel('C:\\Users\Admin\\Desktop\\資料核對\\新建 XLSX 工作表.xlsx')

# 聚合資料
aggregated_data = data.groupby('店鋪名稱')['銷售數量'].sum()

# 按銷售數量降序排列
aggregated_data = aggregated_data.sort_values(ascending=False)

print(aggregated_data)

首先,我們使用 pandas 庫的 read_excel 函數讀取 Excel 檔案中的資料。然後,使用 groupby 函數對資料進行聚合,按照店鋪名稱分組,並對每個組中的銷售數量求和。最後,使用 sort_values 函數按照銷售數量降序排列。

繪製柱狀圖

接下來,我們使用 matplotlib 庫繪製柱狀圖。以下是繪製柱狀圖的程式碼:

import matplotlib.pyplot as plt

# 繪製柱狀圖
aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8)

# 設定圖表標題和座標軸標籤
plt.title('店鋪銷售數量')
plt.xlabel('店鋪名稱')
plt.ylabel('銷售數量')

# 顯示圖表
plt.show()

我們使用 plot 函數繪製柱狀圖,其中 kind 引數指定圖表型別為柱狀圖,color 引數指定柱子的顏色,edgecolor 引數指定柱子邊框的顏色,width 引數指定柱子的寬度。然後,使用 titlexlabel 和 ylabel 函數設定圖表標題和座標軸標籤。最後,使用 show 函數顯示圖表。

新增資料標籤

為了更清楚地展示每個店鋪的銷售數量,我們可以在柱子上新增資料標籤。以下是新增資料標籤的程式碼:

# 新增資料標籤
for i, v in enumerate(aggregated_data):
    plt.text(i, v, str(v), ha='center', va='bottom')

# 顯示圖表
plt.show()

我們使用 text 函數新增資料標籤,其中 i 和 v 分別表示柱子的索引和高度,ha 引數指定水平對齊方式為居中,va 引數指定垂直對齊方式為底部。最後,再次使用 show 函數顯示圖表。

設定刻度標籤

由於店鋪名稱較長,如果全部顯示會導致刻度標籤重疊,影響美觀和可讀性。因此,我們可以旋轉刻度標籤,並設定字型大小和字型樣式。以下是設定刻度標籤的程式碼:

# 設定刻度標籤的字型大小和旋轉角度
plt.xticks(rotation=45, fontsize=10)

# 顯示圖表
plt.show()

我們使用 xticks 函數設定刻度標籤,其中 rotation 引數指定旋轉角度為45度,fontsize 引數指定字型大小為10。

新增圖例

我們可以新增圖例,以便更好地解釋圖表中的資訊。以下是新增圖例的程式碼:

# 設定圖例
plt.legend(['銷售數量'], loc='upper right')

# 顯示圖表
plt.show()

我們使用 legend 函數新增圖例,其中 loc 引數指定圖例位置為右上角,['銷售數量'] 表示圖例中的文字。

去除邊框和新增格線

為了讓圖表更加簡潔和美觀,我們可以去除上邊框和右邊框,並新增水平虛線格線。以下是去除邊框和新增格線的程式碼

# 去除上邊框和右邊框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

# 新增格線
plt.grid(axis='y', linestyle='--', alpha=0.5)

# 顯示圖表
plt.show()

我們使用 gca 函數獲取當前軸物件,然後使用 spines 屬性去除上邊框和右邊框。使用 grid 函數新增水平虛線格線,其中 axis 引數指定格線方向為垂直方向,linestyle 引數指定格線樣式為虛線,alpha 引數指定格線透明度為0.5。

設定背景色和調整佈局

最後,我們可以設定圖表的背景色,並調整圖表佈局使得圖表內容更加緊湊。以下是設定背景色和調整佈局的程式碼:

# 設定背景色
plt.gca().set_facecolor('#F5F5F5')

# 調整圖表佈局
plt.tight_layout()

# 顯示圖表
plt.show()

我們使用 set_facecolor 函數設定背景色為淺灰色,使用 tight_layout 函數調整圖表佈局。

完整程式碼

將上面的程式碼整合起來,得到完整的程式碼如下:

import pandas as pd
import matplotlib.pyplot as plt

# 從Excel檔案中讀取資料
data = pd.read_excel('C:\\Users\Admin\\Desktop\\資料核對\\新建 XLSX 工作表.xlsx')

# 聚合資料
aggregated_data = data.groupby('店鋪名稱')['銷售數量'].sum()

# 按銷售數量降序排列
aggregated_data = aggregated_data.sort_values(ascending=False)

# 繪製柱狀圖
aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8)

# 新增資料標籤
for i, v in enumerate(aggregated_data):
    plt.text(i, v, str(v), ha='center', va='bottom')

# 設定圖表標題和座標軸標籤
plt.title('店鋪銷售數量')
plt.xlabel('店鋪名稱')
plt.ylabel('銷售數量')

# 設定刻度標籤的字型大小和旋轉角度
plt.xticks(rotation=45, fontsize=10)

# 設定圖例
plt.legend(['銷售數量'], loc='upper right')

# 去除上邊框和右邊框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

# 新增格線
plt.grid(axis='y', linestyle='--', alpha=0.5)

# 設定背景色
plt.gca().set_facecolor('#F5F5F5')

# 調整圖表佈局
plt.tight_layout()

# 顯示圖表
plt.show()