當你需要展示資料時,圖表是一個非常有用的工具。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
引數指定柱子的寬度。然後,使用 title
、xlabel
和 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()