
這篇文章來探索下多類別條形圖比如各學(xué)校包含語文、數(shù)學(xué)、英語三科成績的條形圖怎樣繪制。在繪圖之前,先來復(fù)習(xí)一下條形圖函數(shù)中主要參數(shù)的含義:
小例子輔助理解:
x = [0.7, 1.5, 2, 3] height = [3, 10, 12, 7] plt.bar(x, height, width=0.3, bottom=[3, 0, 0, 1] ) plt.show()
參照代碼和圖形再理解下各個參數(shù)的作用。ok,萬事俱備,開始繪圖!
先看一下原數(shù)據(jù)data1長什么樣子再敲代碼:
plt.figure(figsize=(16,6)) x_s = np.array(list(range(0,20,2))) #設(shè)置語文成績的條形所在位置 plt.bar(x_s,data1.loc[:,"語文"].iloc[:10],width=0.5) #繪制語文成績的條形圖 x_y = np.array(list(range(0,20,2)))+0.5 #設(shè)置數(shù)學(xué)成績的條形所在位置 plt.bar(x_y,data1.loc[:,"數(shù)學(xué)"].iloc[:10],width=0.5) #繪制數(shù)學(xué)成績的條形圖 x_y = np.array(list(range(0,20,2)))+1 #設(shè)置英語成績的條形所在位置 plt.bar(x_y,data1.loc[:,"英語"].iloc[:10],width=0.5) #繪制英語成績的條形圖 plt.title("成績條形圖",fontsize = 14) plt.ylabel("成績",fontsize = 14) plt.xticks(x_s+0.5,data1.iloc[:,0].iloc[:10],fontsize = 12) #x軸刻度為各學(xué)校名稱,為了刻度正好在三個條形的正中間,設(shè)置(x_s+0.5) plt.legend(["語文","數(shù)學(xué)","英語"]);
坐標(biāo)軸和rc參數(shù)設(shè)置的講解中有提到過,在同一塊畫布上是可以重復(fù)繪圖的,其實在一幅條形圖中繪制多個類別的條形圖應(yīng)用的就是這個原理。需要注意的是不要讓后邊繪制的圖形覆蓋前邊繪制的圖形,所以需要提前計算好每個條形應(yīng)該畫在哪個地方。
通過代碼可以看到都進行了哪些設(shè)置,每個條形的寬度都是0.5,所以在繪制好第一個學(xué)科的條形圖后,排在第二個位置進行繪制的條形圖所有的條所在x軸的位置都在第一個學(xué)科條形位置的基礎(chǔ)上增加了0.5,第三個學(xué)科的條形又在第二個學(xué)科條形位置的基礎(chǔ)上再增加0.5的距離,這樣,每個學(xué)校的三個學(xué)科可以挨著展示出來又不會發(fā)生條形重疊的情況。
這里需要注意的另一個問題就是每個學(xué)??潭戎g要流出足夠的位置放置三個條形。每個條形的寬度都是0.5,一共需要1.5個位置,所以在設(shè)置刻度的時候,每個刻度之間的間隔(range(0,20,2)),一共10個刻度,對應(yīng)選取的10所學(xué)校,刻度間距為2,超過所需的1.5。
最終的效果圖:
圖是畫出來了,但是畫的過程中需要心算一下各種位置,除了各個條形的位置還有刻度的位置,著實有點麻煩,那么有沒有其他更簡便一點的方法呢?
先來和我們熟悉的matplotlib繪圖做對比,用matplotlib繪圖時先選擇繪圖函數(shù),然后把原數(shù)據(jù)作為參數(shù)傳入函數(shù)中,而dataframe直接繪圖的時候,類似調(diào)用了dataframe的方法,在通過參數(shù)選擇進行哪種圖形的繪制。
干說沒實感,來段代碼感受下:
#通過參數(shù)設(shè)置生成圖形的類型 data2.iloc[:10].plot(x = '學(xué)校',y = ['語文','數(shù)學(xué)','英語'],kind = "bar" ,figsize=(16,6),width=0.7,rot = 0,title = "各學(xué)科成績條形圖");
一行代碼搞定,先來看下效果圖:
是不是看起來和上邊matplotlib繪制的圖差不多,代碼卻簡潔了很多。先看下原dataframe長什么樣子:
接著具體研究下都是哪些參數(shù)在影響繪圖:
這里寫出兩種方法實現(xiàn)相同的操作,在實際的工作中,按照需求自行選擇即可。
有時候,除了查看單個類別的情況,還需要同時查看總體的情況,這就是堆積條形圖擅長的領(lǐng)域了。繪制堆積條形圖和繪制普通條形圖用的都是plt.bar()函數(shù),也是通過參數(shù)設(shè)置實現(xiàn)堆積條形圖的繪制。
還是對參數(shù)設(shè)置不太熟的孩子可以回到文章開頭回憶下重要參數(shù)的作用,這里實現(xiàn)用語文、數(shù)學(xué)、英語三科成績的堆積條形圖:
plt.figure(figsize=(16,6)) plt.bar(range(21),data1.loc[:,"語文"],width=0.9,label = "語文") plt.bar(range(21),data1.loc[:,"數(shù)學(xué)"],bottom=np.array(data1.loc[:,"語文"]),width=0.9,label ="數(shù)學(xué)") plt.bar(range(21),data1.loc[:,"英語"],bottom=np.array(data1.loc[:,"語文"]+data1.loc[:,"數(shù)學(xué)"]) ,width=0.9,label ="英語") totle_score = np.array(data1.loc[:,"語文"]+data1.loc[:,"數(shù)學(xué)"]+data1.loc[:,"英語"]).astype("int") for i in range(21): plt.text(i-0.25,totle_score[i]+1,totle_score[i]) #為條形圖中的每個條添加標(biāo)簽 plt.title("各學(xué)校成績堆積圖",fontsize = 14) plt.ylabel("成績",fontsize = 14) plt.xticks(range(21),data1.iloc[:,0],rotation=30,fontsize = 12)#x軸刻度為各學(xué)校名稱 plt.legend() #顯示圖例;
原理和前邊畫三科成績條形圖一樣,都是在同一塊畫布上重復(fù)繪圖,注意繪圖的邏輯即可。這里是先畫一個學(xué)科成績的縱向條形圖,通過bottom參數(shù)控制第二個學(xué)科成績繪圖時在y軸方向的起始值,也就是在第一科學(xué)科成績條形的頂端接著畫第二科學(xué)科成績的條,然后在第二科成績條形的頂端繼續(xù)畫第三個學(xué)科成績的條形,這樣形成的就是堆積條形圖。
當(dāng)然還有一些細節(jié)需要注意,比如三個學(xué)科條形的寬度得設(shè)置成一樣的尺寸,避免影響美觀。
細心的孩子可能已經(jīng)發(fā)現(xiàn)了一點新鮮的設(shè)置:多了一個函數(shù)plt.text(),這個函數(shù)的作用是在條形的頂端添加了該條形的標(biāo)簽,即三科的總成績。因為要對每個條形增加一個標(biāo)簽,所以運用了循環(huán),將總分作為標(biāo)簽添加到了圖形中。
通過plt.text()函數(shù)可以在整幅圖的任意位置添加需要的文本進去。函數(shù)的第一個參數(shù)控制文本在x軸方向的位置,第二個參數(shù)控制文本在y軸方向的位置,第三個參數(shù)為添加的文本信息。
啰里啰唆說了這么多,來看下堆積條形圖的效果:
和常見的堆積條形圖沒什么不一樣對吧,其實條形圖依然又值得深挖的地方,還有很多有意思的設(shè)置可以嘗試呢。來個預(yù)告,計劃在下一篇文章離探索一下發(fā)散型條形圖。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10CDA 數(shù)據(jù)分析師:商業(yè)數(shù)據(jù)分析實踐的落地者與價值創(chuàng)造者 商業(yè)數(shù)據(jù)分析的價值,最終要在 “實踐” 中體現(xiàn) —— 脫離業(yè)務(wù)場景的分 ...
2025-09-10