Python 利用pandas和matplotlib繪製柱狀折線圖

2023-11-10 06:00:58

建立資料視覺化圖表:柱狀圖與折線圖結合

在資料分析和展示中,經常需要將資料視覺化呈現,以便更直觀地理解資料背後的趨勢和關聯關係。本篇文章將介紹如何使用 Python 中的 Pandas 和 Matplotlib 庫建立一個柱狀圖與折線圖結合的資料視覺化圖表。

準備工作

首先,我們需要匯入必要的庫,並讀取我們的資料來源,這裡使用了 Pandas 庫來讀取 Excel 檔案,Matplotlib 則用於繪製圖表。

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = ['SimHei']  # 指定中文字型為黑體

# 讀取Excel檔案
df = pd.read_excel('新建 XLSX 工作表.xlsx', sheet_name='Sheet3')

資料處理與準備

在這一部分,我們會對資料進行處理,並準備好需要用到的資料。具體操作包括設定 x 軸的位置和準備子圖等。

# 設定x軸的位置
x = df.index
# 建立畫布和子圖
fig, ax1 = plt.subplots()

繪製柱狀圖和折線圖

接下來,我們將繪製柱狀圖和折線圖,並新增相應的資料標籤和圖例。

# 繪製柱狀圖
ax1.bar(x, df['銷售數量'], label='銷售數量', color='skyblue', width=0.4)

# 新增資料標籤
for i, v in enumerate(df['銷售數量']):
    ax1.text(i, v + 3, str(v), ha='center', va='bottom', fontsize=8)

# 繪製折線圖
ax1.plot(x, df['銷售數量2'], color='lightgreen', marker='o', linestyle='-', linewidth=2)

# 新增折線圖資料標籤
for i, v in enumerate(df['銷售數量2']):
    ax1.text(i, v + 3, str(v), ha='center', va='bottom', color='g', fontsize=8)

圖表美化和展示

最後,我們對圖表進行美化,包括新增標籤、標題、圖例以及設定座標軸刻度標籤字型大小等,並展示最終的圖形。

# 新增標籤和標題
ax1.set_xlabel('店鋪名稱', fontsize=10)
ax1.set_ylabel('銷售數量/銷售數量2', fontsize=10)
ax1.set_title('銷售數量與銷售數量2對比', fontsize=12)
ax1.set_xticks(x)
ax1.set_xticklabels(df['店鋪名稱'], rotation=0, ha='right')
ax1.legend(['銷售數量', '銷售數量2'], loc='upper left')

# 設定座標軸刻度標籤字型大小
ax1.tick_params(axis='both', which='major', labelsize=8)

# 增加格線
ax1.grid(axis='y', linestyle='--', alpha=0.7)

# 顯示圖形
plt.show()

通過以上步驟,我們成功建立了一個柱狀圖與折線圖結合的資料視覺化圖表。

圖表效果圖展示

 完整程式碼:

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = ['SimHei']  # 指定中文字型為黑體

# 讀取Excel檔案
df = pd.read_excel(r'C:\Users\liuchunlin2\Desktop\新建資料夾\新建 XLSX 工作表.xlsx', sheet_name='Sheet3')

# 設定x軸的位置
x = df.index

# 建立畫布和子圖
fig, ax1 = plt.subplots()

# 繪製柱狀圖
ax1.bar(x, df['銷售數量'], label='銷售數量', color='skyblue', width=0.4)

# 新增資料標籤
for i, v in enumerate(df['銷售數量']):
    ax1.text(i, v + 3, str(v), ha='center', va='bottom', fontsize=8)

# 繪製折線圖
ax1.plot(x, df['銷售數量2'], color='lightgreen', marker='o', linestyle='-', linewidth=2)

# 新增折線圖資料標籤
for i, v in enumerate(df['銷售數量2']):
    ax1.text(i, v + 3, str(v), ha='center', va='bottom', color='g', fontsize=8)

# 新增標籤和標題
ax1.set_xlabel('店鋪名稱', fontsize=10)
ax1.set_ylabel('銷售數量/銷售數量2', fontsize=10)
ax1.set_title('銷售數量與銷售數量2對比', fontsize=12)
ax1.set_xticks(x)
ax1.set_xticklabels(df['店鋪名稱'], rotation=0, ha='right')
ax1.legend(['銷售數量', '銷售數量2'], loc='upper left')

# 設定座標軸刻度標籤字型大小
ax1.tick_params(axis='both', which='major', labelsize=8)

# 增加格線
ax1.grid(axis='y', linestyle='--', alpha=0.7)

# 顯示圖形
plt.show()