如何用Python繪製百分比堆疊橫條圖

更新於 發佈於 閱讀時間約 6 分鐘

首先我們的資料如下

import pandas as pd
data = pd.read_excel("rawdata.xlsx")
raw-image

接著我們要將我們的資料,整理成方便我們繪圖的DataFrame

#先建立一個要存放我們繪圖要使用的DataFrame
dataFinal = pd.DataFrame()
dataFinal["量度"]=["非常不同意","不同意","普通","同意","非常同意"]

#將我們要繪製的每一題做一個迴圈,去計算它們的百分比值
for i in ["學習狀況良好","體育狀況良好","人際狀況良好"]:

    #建立一個樞紐分析表,去紀錄各量度的個數
    dataPvt = data[[i,"姓名"]].pivot_table(index=i,aggfunc="count").reset_index()
    dataPvt.rename(columns={i:"量度"},inplace=True)

    #寫一個轉換函數,建立一個排序值的欄位,以此進行排序
    def word2num(x):
        if x == "非常同意": return 5
        elif x == "同意": return 4
        elif x == "普通": return 3
        elif x == "不同意": return 2
        elif x == "非常不同意": return 1
    dataPvt["排序值"] = list(map(lambda x : word2num(x),dataPvt["量度"]))
    dataPvt.sort_values(by="排序值",inplace=True)

    #建立一個百分比值的欄位
    dataPvt[i] = list(map(lambda x: ((x/dataPvt["姓名"].sum())*100),dataPvt["姓名"]))

    #將百分比值欄位添加進繪圖要使用的DataFrame
    dataFinal[i] = dataPvt[i]

#將DataFrame中的遺漏值補為0
dataFinal.fillna(0,inplace=True)
raw-image

有了這樣的資料,我們就可以開始繪製百分比堆疊直條圖了:

import matplotlib

#選擇中文字體
matplotlib.rc("font",family="Microsoft YaHei")

from matplotlib import pyplot as plt

#繪製圖的大小
plt.figure(figsize=(8,4))

#繪製一個位於包含1X1個子圖的圖且位置在(0,0)的子圖
ax0 = plt.subplot2grid((1,1),(0,0),colspan=1,rowspan=1)

#--------------------------------

#建立x軸資料
ax0_x = dataFinal.columns.values.tolist()
ax0_x.remove("量度")

#建立h軸資料來源(因為我們從中取出不同的資料作堆疊)
ax0_h_source = dataFinal.drop(columns="量度")

#建立稍候迴圈堆疊時會用到的變數
start = 0
colorList = ["darkred","red","darkgray","green","darkgreen"]

#--------------------------------

#開始繪製Bar
for i, color_value, label_value in zip(range(0,5),colorList,["非常不同意","不同意","普通","同意","非常同意"]):
    #從h軸資料來源中取出1行作為h軸資料
    ax0_h = ax0_h_source.loc[i]
    #left是指起始位置,讓它從0開始
    ax0.barh(ax0_x,ax0_h,height=0.5,left=start,color=color_value,label=label_value)
    #讓下一次繪圖時的起始值,加上這次h的值,以此做堆疊
    start = start + ax0_h
    #利用迴圈,加上數值資訊
    for k,r,j in zip(start,range(0,len(list(ax0_x))),ax0_h):
        if j!=0:
            ax0.text(k-j/2, r, str(round(j)) + "%", color="white", horizontalalignment="center",verticalalignment="center",fontsize=10)
        elif j == 0:
            ax0.text(k-j/2, r, "", color="white", horizontalalignment="center",verticalalignment="center",fontsize=10)

#--------------------------------

#讓x軸座標與刻度不顯現
ax0.set_xticklabels([])
ax0.set_xticks([])

#建立圖例資訊
ax0.legend(ncols=5, loc="lower center",bbox_to_anchor=(0.5,-0.15))

#建立標題
plt.title("百分比堆疊直條圖")    
raw-image



留言
avatar-img
留言分享你的想法!
avatar-img
果農的沙龍
7會員
61內容數
我是果農,這裡有我的人資職涯經驗分享,與我菜鳥般的Python資料分析筆記,還有一些讀書心得,希望對大家有幫助。
果農的沙龍的其他內容
2024/08/30
如何用Python做可調整是否能重複抽獎的程式
Thumbnail
2024/08/30
如何用Python做可調整是否能重複抽獎的程式
Thumbnail
2024/08/23
如何用Python繪製彩色表格
Thumbnail
2024/08/23
如何用Python繪製彩色表格
Thumbnail
2024/08/23
如何調整成Python的日期格式
Thumbnail
2024/08/23
如何調整成Python的日期格式
Thumbnail
看更多
你可能也想看
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文在介紹如何用Python繪製各點大小不同的散布圖及用箭頭標註特殊點
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文將介紹如何用Python繪製群組直條圖。
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
本文介紹如何用Python繪製散布圖與迴歸線
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
這篇文章介紹如何使用Python整理資料成百分比資料以及繪製百分比堆疊直條圖。
Thumbnail
透過分析臺灣好行的公開資料,分享如何用Python繪製折線圖
Thumbnail
透過分析臺灣好行的公開資料,分享如何用Python繪製折線圖
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
Thumbnail
本文介紹了如何使用資料樞紐分析的功能來整理所需的資料,並設定圖表的中文字型,最後提供了繪圖的程式碼範例。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News