這篇文章來探索下多類別條形圖比如各學校包含語文、數學、英語三科成績的條形圖怎樣繪制。在繪圖之前,先來復習一下條形圖函數中主要參數的含義:
小例子輔助理解:
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()
參照代碼和圖形再理解下各個參數的作用。ok,萬事俱備,開始繪圖!
先看一下原數據data1長什么樣子再敲代碼:
plt.figure(figsize=(16,6)) x_s = np.array(list(range(0,20,2))) #設置語文成績的條形所在位置 plt.bar(x_s,data1.loc[:,"語文"].iloc[:10],width=0.5) #繪制語文成績的條形圖 x_y = np.array(list(range(0,20,2)))+0.5 #設置數學成績的條形所在位置 plt.bar(x_y,data1.loc[:,"數學"].iloc[:10],width=0.5) #繪制數學成績的條形圖 x_y = np.array(list(range(0,20,2)))+1 #設置英語成績的條形所在位置 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軸刻度為各學校名稱,為了刻度正好在三個條形的正中間,設置(x_s+0.5) plt.legend(["語文","數學","英語"]);
坐標軸和rc參數設置的講解中有提到過,在同一塊畫布上是可以重復繪圖的,其實在一幅條形圖中繪制多個類別的條形圖應用的就是這個原理。需要注意的是不要讓后邊繪制的圖形覆蓋前邊繪制的圖形,所以需要提前計算好每個條形應該畫在哪個地方。
通過代碼可以看到都進行了哪些設置,每個條形的寬度都是0.5,所以在繪制好第一個學科的條形圖后,排在第二個位置進行繪制的條形圖所有的條所在x軸的位置都在第一個學科條形位置的基礎上增加了0.5,第三個學科的條形又在第二個學科條形位置的基礎上再增加0.5的距離,這樣,每個學校的三個學科可以挨著展示出來又不會發生條形重疊的情況。
這里需要注意的另一個問題就是每個學??潭戎g要流出足夠的位置放置三個條形。每個條形的寬度都是0.5,一共需要1.5個位置,所以在設置刻度的時候,每個刻度之間的間隔(range(0,20,2)),一共10個刻度,對應選取的10所學校,刻度間距為2,超過所需的1.5。
最終的效果圖:
圖是畫出來了,但是畫的過程中需要心算一下各種位置,除了各個條形的位置還有刻度的位置,著實有點麻煩,那么有沒有其他更簡便一點的方法呢?
先來和我們熟悉的matplotlib繪圖做對比,用matplotlib繪圖時先選擇繪圖函數,然后把原數據作為參數傳入函數中,而dataframe直接繪圖的時候,類似調用了dataframe的方法,在通過參數選擇進行哪種圖形的繪制。
干說沒實感,來段代碼感受下:
#通過參數設置生成圖形的類型 data2.iloc[:10].plot(x = '學校',y = ['語文','數學','英語'],kind = "bar" ,figsize=(16,6),width=0.7,rot = 0,title = "各學科成績條形圖");
一行代碼搞定,先來看下效果圖:
是不是看起來和上邊matplotlib繪制的圖差不多,代碼卻簡潔了很多。先看下原dataframe長什么樣子:
接著具體研究下都是哪些參數在影響繪圖:
這里寫出兩種方法實現相同的操作,在實際的工作中,按照需求自行選擇即可。
有時候,除了查看單個類別的情況,還需要同時查看總體的情況,這就是堆積條形圖擅長的領域了。繪制堆積條形圖和繪制普通條形圖用的都是plt.bar()函數,也是通過參數設置實現堆積條形圖的繪制。
還是對參數設置不太熟的孩子可以回到文章開頭回憶下重要參數的作用,這里實現用語文、數學、英語三科成績的堆積條形圖:
plt.figure(figsize=(16,6)) plt.bar(range(21),data1.loc[:,"語文"],width=0.9,label = "語文") plt.bar(range(21),data1.loc[:,"數學"],bottom=np.array(data1.loc[:,"語文"]),width=0.9,label ="數學") plt.bar(range(21),data1.loc[:,"英語"],bottom=np.array(data1.loc[:,"語文"]+data1.loc[:,"數學"]) ,width=0.9,label ="英語") totle_score = np.array(data1.loc[:,"語文"]+data1.loc[:,"數學"]+data1.loc[:,"英語"]).astype("int") for i in range(21): plt.text(i-0.25,totle_score[i]+1,totle_score[i]) #為條形圖中的每個條添加標簽 plt.title("各學校成績堆積圖",fontsize = 14) plt.ylabel("成績",fontsize = 14) plt.xticks(range(21),data1.iloc[:,0],rotation=30,fontsize = 12)#x軸刻度為各學校名稱 plt.legend() #顯示圖例;
原理和前邊畫三科成績條形圖一樣,都是在同一塊畫布上重復繪圖,注意繪圖的邏輯即可。這里是先畫一個學科成績的縱向條形圖,通過bottom參數控制第二個學科成績繪圖時在y軸方向的起始值,也就是在第一科學科成績條形的頂端接著畫第二科學科成績的條,然后在第二科成績條形的頂端繼續畫第三個學科成績的條形,這樣形成的就是堆積條形圖。
當然還有一些細節需要注意,比如三個學科條形的寬度得設置成一樣的尺寸,避免影響美觀。
細心的孩子可能已經發現了一點新鮮的設置:多了一個函數plt.text(),這個函數的作用是在條形的頂端添加了該條形的標簽,即三科的總成績。因為要對每個條形增加一個標簽,所以運用了循環,將總分作為標簽添加到了圖形中。
通過plt.text()函數可以在整幅圖的任意位置添加需要的文本進去。函數的第一個參數控制文本在x軸方向的位置,第二個參數控制文本在y軸方向的位置,第三個參數為添加的文本信息。
啰里啰唆說了這么多,來看下堆積條形圖的效果:
和常見的堆積條形圖沒什么不一樣對吧,其實條形圖依然又值得深挖的地方,還有很多有意思的設置可以嘗試呢。來個預告,計劃在下一篇文章離探索一下發散型條形圖。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《劉靜:10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda ...
2025-04-23