溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎樣繪制堆疊條形圖

發布時間:2021-12-20 09:02:42 來源:億速云 閱讀:219 作者:柒染 欄目:開發技術
# Python怎樣繪制堆疊條形圖

## 概述

堆疊條形圖(Stacked Bar Chart)是一種常見的數據可視化方式,它通過將多個數據系列的條形堆疊在一起,展示各部分占總體的比例以及不同類別間的對比關系。Python中可以使用`matplotlib`、`seaborn`、`plotly`等庫實現堆疊條形圖的繪制。本文將詳細介紹如何使用這些工具創建堆疊條形圖。

---

## 1. 基礎準備

### 1.1 安裝必要庫
確保已安裝以下庫:
```bash
pip install matplotlib pandas seaborn plotly

1.2 導入庫

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px

1.3 示例數據

生成示例數據用于演示:

data = {
    'Category': ['A', 'B', 'C', 'D'],
    'Value1': [20, 35, 30, 25],
    'Value2': [15, 25, 20, 30],
    'Value3': [10, 15, 25, 20]
}
df = pd.DataFrame(data)

2. 使用Matplotlib繪制堆疊條形圖

2.1 基本堆疊條形圖

categories = df['Category']
values1 = df['Value1']
values2 = df['Value2']
values3 = df['Value3']

plt.figure(figsize=(10, 6))
plt.bar(categories, values1, label='Value1')
plt.bar(categories, values2, bottom=values1, label='Value2')
plt.bar(categories, values3, bottom=values1+values2, label='Value3')

plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Stacked Bar Chart with Matplotlib')
plt.legend()
plt.show()

2.2 自定義樣式

plt.figure(figsize=(10, 6))
colors = ['#FF9999', '#66B2FF', '#99FF99']
plt.bar(categories, values1, color=colors[0], edgecolor='black', label='Value1')
plt.bar(categories, values2, bottom=values1, color=colors[1], edgecolor='black', label='Value2')
plt.bar(categories, values3, bottom=values1+values2, color=colors[2], edgecolor='black', label='Value3')

plt.xlabel('Categories', fontsize=12)
plt.ylabel('Values', fontsize=12)
plt.title('Customized Stacked Bar Chart', fontsize=14)
plt.legend(loc='upper right')
plt.grid(axis='y', alpha=0.5)
plt.show()

3. 使用Pandas直接繪圖

Pandas的DataFrame.plot()方法可以快速生成堆疊條形圖:

df.set_index('Category').plot(kind='bar', stacked=True, figsize=(10, 6))
plt.title('Stacked Bar Chart with Pandas')
plt.ylabel('Values')
plt.xticks(rotation=0)
plt.show()

4. 使用Seaborn繪制堆疊條形圖

Seaborn本身不直接支持堆疊條形圖,但可以通過以下方式實現:

4.1 數據重塑

df_melted = df.melt(id_vars='Category', var_name='Variable', value_name='Value')

4.2 使用barplot疊加

plt.figure(figsize=(10, 6))
sns.barplot(x='Category', y='Value', hue='Variable', data=df_melted, dodge=False)
plt.title('Stacked Bar Chart with Seaborn')
plt.show()

注意:此方法實際是透明疊加,如需真正堆疊需手動計算位置。


5. 使用Plotly繪制交互式堆疊條形圖

5.1 基礎交互圖

fig = px.bar(df, x='Category', y=['Value1', 'Value2', 'Value3'], 
             title='Interactive Stacked Bar Chart')
fig.update_layout(barmode='stack')
fig.show()

5.2 高級自定義

fig = px.bar(df, x='Category', y=['Value1', 'Value2', 'Value3'],
             color_discrete_sequence=['#636EFA', '#EF553B', '#00CC96'],
             title='Advanced Stacked Bar Chart',
             labels={'value': 'Total Value'})
fig.update_layout(
    barmode='stack',
    hovermode='x unified',
    legend_title_text='Variables'
)
fig.show()

6. 橫向堆疊條形圖

只需將bar改為barh

plt.figure(figsize=(10, 6))
plt.barh(categories, values1, label='Value1')
plt.barh(categories, values2, left=values1, label='Value2')
plt.barh(categories, values3, left=values1+values2, label='Value3')
plt.title('Horizontal Stacked Bar Chart')
plt.legend()
plt.show()

7. 百分比堆疊條形圖

7.1 數據預處理

df_percent = df.set_index('Category')
df_percent = df_percent.div(df_percent.sum(axis=1), axis=0) * 100

7.2 繪制圖表

df_percent.plot(kind='bar', stacked=True, figsize=(10, 6))
plt.title('100% Stacked Bar Chart')
plt.ylabel('Percentage (%)')
plt.ylim(0, 100)
plt.show()

8. 常見問題與解決方案

8.1 標簽重疊

  • 解決方法:調整figsize或使用旋轉標簽:
    
    plt.xticks(rotation=45)
    

8.2 圖例覆蓋

  • 解決方法:調整圖例位置或圖表邊距:
    
    plt.legend(bbox_to_anchor=(1.05, 1))
    

8.3 大數據集性能

  • 對于超過1000條目的數據,建議:
    • 使用plotly的WebGL渲染
    • 聚合數據后再可視化

9. 應用場景示例

9.1 銷售數據可視化

sales_data = pd.DataFrame({
    'Quarter': ['Q1', 'Q2', 'Q3', 'Q4'],
    'Product_A': [230, 145, 180, 210],
    'Product_B': [120, 190, 210, 140],
    'Product_C': [90, 110, 150, 180]
})

sales_data.set_index('Quarter').plot(kind='bar', stacked=True)
plt.title('Quarterly Sales by Product')
plt.ylabel('Revenue (k$)')
plt.show()

9.2 人口結構分析

age_data = pd.DataFrame({
    'Country': ['USA', 'China', 'Japan'],
    '0-14': [18.5, 17.2, 12.4],
    '15-64': [65.3, 70.1, 59.4],
    '65+': [16.2, 12.7, 28.2]
})

fig = px.bar(age_data, x='Country', y=['0-14', '15-64', '65+'],
             title='Population Age Structure')
fig.update_layout(barmode='stack')
fig.show()

10. 總結

本文介紹了多種Python繪制堆疊條形圖的方法: 1. Matplotlib:最基礎靈活,適合定制化需求 2. Pandas:快速簡便,適合DataFrame數據 3. Seaborn:需配合數據重塑,適合統計可視化 4. Plotly:交互式體驗,適合網頁展示

根據具體需求選擇合適工具,堆疊條形圖能有效展示構成比例和總量對比,是數據分析中的利器。 “`

該文章包含約1750字,采用Markdown格式編寫,覆蓋了從基礎到高級的堆疊條形圖實現方法,并包含代碼示例、問題解決和實際應用場景。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女