Python用?matplotlib?繪制柱狀圖
復習回顧:
Python 為數(shù)據(jù)展示提供了大量優(yōu)秀的功能包,其中 matplotlib 模塊可以方便繪制制作折線圖、柱狀圖、散點圖等高質量的數(shù)據(jù)包。
關于 matplotlib 模塊,我們前期已經對matplotlib進行基本框架、以及常用方法的學習
?matplotlib 模塊基礎知識:對matplotlib模塊進行初步認識,對常用的方法進行學習
matplotlib 模塊底層原理:matplotlib 模塊包含腳本層、美工層及后端層三層細節(jié)了解
matplotlib 模塊折線圖繪制:總結折線圖相關屬性和方法
在 matplotlib 模塊提供的圖表中,除了折線圖使用最多外,柱狀圖也是我們日常數(shù)據(jù)分析的圖表。

接下來我們開始學習繪制柱狀圖相關屬性和方法
1. 柱狀圖概述
1.1什么是柱狀圖
- 柱狀圖又稱為條形圖,是一種以長方形的長度為變量數(shù)據(jù)進行統(tǒng)計的圖表
- 柱狀圖用來比較兩個或以上類型
- 柱狀圖只有一個以長方形的長度為變量
- 柱狀圖可以橫向排列或者多維方式展示
1.2柱狀圖使用場景
- 柱狀圖適用在較小數(shù)據(jù)集的分析
- 適用二維數(shù)據(jù)集,只比較一個維度數(shù)據(jù)差異項
- 直觀展示各個體之間數(shù)據(jù)的差異
- 表現(xiàn)離散型的時間序列
1.3柱狀圖繪制步驟
- 導入matplotlib.pyplot模塊
- 準備數(shù)據(jù),可以使用numpy/pandas整理數(shù)據(jù)
- 調用pyplot.bar()繪制柱狀圖
1.3案例展示
本次,我們分析過去5年內的產品年銷量展示
案例所用到的數(shù)據(jù)如下:
import random
x_data = ["20{}年".format(i) for i in range(16,21)]
y_data = [random.randint(100,300) for i in range(6)]
繪制柱狀圖
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=['SimHei']
plt.rcParams["axes.unicode_minus"]=False
for i in range(len(x_data)):
plt.bar(x_data[i],y_data[i])
plt.title("銷量分析")
plt.xlabel("年份")
plt.ylabel("銷量")
plt.show()

2. 柱狀圖屬性
2.1柱狀體顏色填充
- facecolor(fc)關鍵字
- color 關鍵字
- 顏色簡稱:
| 屬性值 | 說明 | 屬性值 | 說明 |
|---|---|---|---|
| "b"/"bule" | 藍色 | "m"/"magenta" | 品紅 |
| "g" /"green" | 綠色 | "y"/"yellow" | 黃色 |
| "r"/"red" | 紅色 | "k"/"black" | 黑色 |
| "c"/"cyan" | 青色 | "w"/"white" |
- 格式形式:(r,g,b)
- 取值范圍:0~1
2.2狀描邊設置
柱狀體邊框顏色
- edgecolor 或者 ec
柱狀體邊框樣式
- linestyle 或者 ls
- 線條樣式:
| 屬性值 | 說明 |
|---|---|
| "-" 、"solid" | 默認實線顯示 |
| "--"、"dashed" | 虛線 |
| "-." "dashdot" | 點劃線 |
| ":"、"dotted" | 虛線 |
| "None" """" | 空 |
2.3狀體邊框寬度
- linewidth 或者 lw
- 柱狀圖填充樣式
hatch: 設置填充樣式
屬性取值:{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'} |
2.4刻度標簽
- tickle label:默認使用數(shù)字標簽
我們對 第一節(jié)柱狀圖添加邊框樣式為"--",添加指定rgb顏色,填充圓圈
for i in range(len(x_data)): plt.bar(x_data[i],y_data[i],color=(0.2*i,0.2*i,0.2*i),linestyle="--",hatch="o")

3. 堆疊柱狀圖
- 在柱狀圖中,我們會在同時對比兩組數(shù)據(jù)在同一類中的表現(xiàn)形式,因此需要繪制堆疊柱狀圖
- bottom : 條形底座的y坐標,默認值為0
在第一節(jié)案例中,添加一組y軸數(shù)據(jù)所有數(shù)據(jù)如下:
x_data = ["20{}年".format(i) for i in range(16,21)]
y_data = list(random.randint(100,300) for i in range(5))
y2_data = list(random.randint(100,300) for i in range(5))
再添加一次pyplot.bar方法,添加bottom屬性
plt.bar(x_data,y_data,lw=0.5,fc="r",label="Phone") plt.bar(x_data,y2_data,lw=0.5,fc="b",label="Android",bottom=y_data)

4. 并列柱狀圖
在繪制并列的柱狀圖中,要控制好每個柱狀體的位置和大小可以使用width屬性
- width: 設置每組柱狀體的寬度
- x軸:x軸的寬度每組直接也要設置好
例如繼續(xù)改造上面案例,我們?yōu)閎ar1和bar2添加了width屬性后,單獨設置x軸并排的寬度為0.3
x_width = range(0,len(x_data)) x2_width = [i+0.3 for i in x_width] plt.bar(x_width,y_data,lw=0.5,fc="r",width=0.3,label="Phone") plt.bar(x2_width,y2_data,lw=0.5,fc="b",width=0.3,label="Android") plt.xticks(range(0,5),x_data)

5. 水平柱狀圖
柱狀圖中,有時候需要讓柱狀圖水平放置,比較差異,我們這時候需要使用到barh方法
- pyplot.barh(y,width):繪制水平柱狀圖
- 結合上述案例,改用barh方法
x_data = ["20{}年".format(i) for i in range(16,21)]
y_data = list(random.randint(100,300) for i in range(5))
y2_data = list(random.randint(100,300) for i in range(5))
x_width = range(0,len(x_data))
x2_width = [i+0.3 for i in x_width]
plt.barh(x_width,y_data,lw=0.5,fc="r",height=0.3,label="Phone")
plt.barh(x2_width,y2_data,lw=0.5,fc="b",height=0.3,label="Android")
plt.yticks(range(0,5),x_data)
plt.legend()
plt.title("銷量分析")
plt.ylabel("年份")
plt.xlabel("銷量")
plt.show()

6. 添加折線柱狀圖
我們在查看柱狀圖時,有時候會需要輔助折線來查看
- 使用
pyplot.plot()方法匯總折線圖 - 同時使用
pyplot.text()顯示坐標值 - 當堆疊圖時,需要計算好折線相對位置
plt.plot(x_data,y_data,color="pink",linestyle="--") plt.plot(x_data, y2_data+200, color="skyblue", linestyle="-.") # 柱狀圖 plt.bar(x_data,y_data,lw=0.5,fc="r",width=0.3,label="Phone",alpha=0.5) plt.bar(x_data,y2_data, lw=0.5, fc="b", width=0.3, label="Android",alpha=0.5,bottom=y_data) for i,j in zip(x_data,y_data): plt.text(i,j+0.05,"%d"%j,ha="center",va="bottom") for i2,j2 in zip(x_data,y2_data): plt.text(i2,j2+180,"%d"%j2,ha="center",va="bottom")

7. 正負柱狀圖
我們需要使用Axes對象來設置坐標軸的位置
- 首先使用
pyplot.gca()方法創(chuàng)建axes對象 - 然后使用
matplotlib.spines模塊調用set_position設置坐標軸位置 - set_position 設置軸位置點
- spines[]選項有"
left"|"bottom"|"width"|"height" - set_position 值格式為(位置類型,數(shù)量);位置類型;"outward"|"axes"|"data"|;數(shù)量:中心->("軸",0.5),零->("數(shù)據(jù)",0.0)
y_data = np.random.randint(100, 300,5)
y2_data = np.random.randint(100, 300,5)
ax = plt.gca()
ax.spines["bottom"].set_position(('data', 0))
plt.bar(x_data,+y_data,lw=0.5,fc="r",width=0.3,label="Phone")
plt.bar(x_data,-y2_data, lw=0.5, fc="b", width=0.3, label="Android")
for i,j in zip(x_data,y_data):
plt.text(i,j,"%d"%j,ha="center",va="top")
for i2,j2 in zip(x_data,y2_data):
plt.text(i2,-j2,"%d"%j2,ha="center",va="bottom")

總結:
本文我們atplotlib模塊中詳細學習繪制各種柱狀圖標相關屬性和方法,在遇到需要直觀展示離散數(shù)據(jù)點的差異時,我們可以使用bar()或者barh()繪制美觀的圖表。
到此這篇關于Python用 matplotlib 繪制柱狀圖的文章就介紹到這了,更多相關matplotlib 繪制柱狀圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
tensorflow圖像裁剪進行數(shù)據(jù)增強操作
這篇文章主要介紹了tensorflow圖像裁剪進行數(shù)據(jù)增強操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python FastAPI 多參數(shù)傳遞的示例詳解
這篇文章主要介紹了Python FastAPI 多參數(shù)傳遞,FastAPI通過模板來匹配URL中的參數(shù)列表,大概分為三類方式傳遞參數(shù),每種方式結合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2022-12-12
Python Pandas批量讀取csv文件到dataframe的方法
這篇文章主要介紹了Python Pandas批量讀取csv文件到dataframe的方法,需要的朋友可以參考下2018-10-10
Python入門教程(四十)Python的NumPy數(shù)組創(chuàng)建
這篇文章主要介紹了Python入門教程(四十)Python的NumPy數(shù)組創(chuàng)建,NumPy 用于處理數(shù)組,NumPy 中的數(shù)組對象稱為 ndarray,我們可以使用 array() 函數(shù)創(chuàng)建一個 NumPy ndarray 對象,需要的朋友可以參考下2023-05-05

