Py-plt: Matplotlib常用柱狀圖詳解
Python - Matplotlib - 柱狀圖
Matplotlib 是一個用於在 Python 中繪製陣列的圖形庫
下面程式碼可以直接在python環境下執行
目錄
- 例子1: 如何生成一個柱狀圖
- plt.bar() 函式
- 官方文件
- 例子2:如何控制柱狀圖的顏色和下標
- plt.bar() 函式中的 color, tick_label 引數
- 例子3:標註每個柱子的高度
- plt.annotate() 函式
- 官方文件
- 例子4: 如何做並列的條形圖
- ax.set_xticks()
- ax.set_xticklabels()
- 例子5: 如何做橫向的條形圖
- plt.barh()
- ax.invert_yaxis()
正文
例子1: 如何生成一個柱狀圖
#最基礎的柱狀圖
import random
import numpy as np
import matplotlib.pyplot as plt
#產生10個範圍在0-20之間的整數, data=[7, 17, 4, 9, 14, 6, 14, 16, 12, 9]
np.random.seed(543)
data = np.random.randint(0,20,10)
#通過plt.bar()函式生成bar chart
plt.bar(np.arange(0,20,2), data, align='center', alpha=0.5)
plt.show()
- plt.bar(x, height, width=0.8, bottom=None, *, align=‘center’, data=None, *kwargs)
常用引數,官方文件:- x : 柱狀圖的每一個柱子的x座標.
- height: 每個柱子的高度.
- width: 每個柱子的寬度.
- bottom: 每個柱子的起點是多少,預設0.
- align: 按照哪裡對其,‘center’ 對齊x座標的中間,‘edge’ 對齊x座標的右側.
- color: 每根柱子的顏色.
- alpha: 柱子的透明度,取值[0,1]
- tick_label: 每個柱子x軸上的標籤.
- 結果:
例子2:如何控制柱狀圖的顏色和下標
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', 'r', 'b']
labels = ['AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III','JJJ']
data=[7, 17, 4, 9, 14, 6, 14, 16, 12, 9]
plt.bar(np.arange(0,20,2), data, align='center', alpha=0.7, color=colors, tick_label=labels)
#控制y軸的刻度
plt.yticks(np.arange(0,30,5))
#展示結果
plt.show()
座標系的控制,例如 plt.yticks() 在另一篇文章中有較為詳細的描述
結果:
例子3:標註每個柱子的高度
#標註每個柱子上面加標註
#生成資訊
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', 'r', 'b']
labels = ['AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III','JJJ']
data=[7, 17, 4, 9, 14, 6, 14, 16, 12, 9]
#生成柱狀圖
fig, ax = plt.subplots(figsize=(10,8))
bars1 = plt.bar(np.arange(0,20,2), data, align='center', alpha=0.7, color=colors, tick_label=labels)
#給每個柱子上面新增標註
for b in bars1: #遍歷每個柱子
height = b.get_height()
ax.annotate('{}'.format(height),
#xy控制的是,標註哪個點,x=x座標+width/2, y=height,即柱子上平面的中間
xy=(b.get_x() + b.get_width() / 2, height),
xytext=(0,3), #文字放置的位置,如果有textcoords,則表示是針對xy位置的偏移,否則是圖中的固定位置
textcoords="offset points", #兩個選項 'offset pixels','offset pixels'
va = 'bottom', ha = 'center' #代表verticalalignment 和horizontalalignment,控制水平對齊和垂直對齊。
)
#展示結果
plt.show()
- plt.annotate(text, xy, *args, **kwargs)
主要引數,官方文件,另一篇文章的例4也有關於這個函式的補充 :- text: 要顯示的文字
- xy: 它控制標註圖中的哪個點
- xytext:文字放置的位置,如果有textcoords,則表示是針對xy位置的偏移,否則是圖中的固定位置
- textcoords:兩個選項 ‘offset pixels’,‘offset pixels’,文字偏移的單位是point 或 pixels
- va,ha :代表verticalalignment 和horizontalalignment,控制水平對齊和垂直對齊
- 結果:
例子4: 如何做並列的條形圖
#Group Bar chart
import random
import numpy as np
import matplotlib.pyplot as plt
#生成資訊
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', 'r', 'b']
labels = ['AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III','JJJ']
data1 = [7, 17, 4, 9, 14, 6, 14, 16, 12, 9]
data2 = [22, 0, 26, 14, 21, 12, 6, 24, 0, 22]
width = 0.7
xpos = np.arange(0,20,2)
#生成柱狀圖
fig, ax = plt.subplots(figsize=(10,8))
bars1 = plt.bar(xpos-width/2, data1, align='center', width=width, alpha=0.9, color='#1f77b4', label = 'Category A')
bars2 = plt.bar(xpos+width/2, data2, align='center', width=width, alpha=0.9, color='#ff7f0e', label = 'Category B')
#設定每個柱子下面的記號
ax.set_xticks(xpos) #確定每個記號的位置
ax.set_xticklabels(labels) #確定每個記號的內容
#給每個柱子上面新增標註
def autolabel(rects):
"""Attach a text label above each bar in *rects*, displaying its height."""
for rect in rects:
height = rect.get_height()
ax.annotate('{}'.format(height),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 3), # 3 points vertical offset
textcoords="offset points",
ha='center', va='bottom'
)
autolabel(bars1)
autolabel(bars2)
#展示結果
plt.legend()
plt.show()
- 並列的條形圖,Group bar chart 其實是兩/多個bar chart合併在一個座標系上。
- 依舊可以使用plt.bar() 裡面的tick_labels 引數定義每個柱子的下標,但是更常用的把一組柱子標記為一個記號。它可以通過ax.set_xticks(), 和ax.set_xticklabels() 兩個函式在一起實現。其中ax.set_xticks(xpos)確定每個記號的位置,ax.set_xticklabels(labels)確定每個記號的內容
- 結果:
例子5: 如何做橫向的條形圖
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
labels = ['AAA','BBB','CCC','DDD','EEE','FFF','GGG','HHH','III','JJJ']
data1 = [7, 17, 4, 9, 14, 6, 14, 16, 12, 9]
indexes = np.argsort(-np.array(data1))
data1_sorted = [data1[i] for i in indexes]
labels_sorted = [labels[i] for i in indexes]
y_pos = np.arange(len(labels))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))
ax.barh(y_pos, data1_sorted, align='center')
ax.set_yticks(y_pos)
ax.set_yticklabels(labels_sorted)
ax.invert_yaxis() # labels read top-to-bottom
plt.show()
- plt.barh(y, width, height=0.8, left=None, *, align=‘center’, **kwargs)
常用函式和plt.bar() 幾乎一致 - ax.invert_yaxis(),反轉y座標
- 結果:
相關文章
- 【matplotlib 實戰】--柱狀圖
- Echarts 柱狀圖配置詳解Echarts
- Python 利用pandas 和 matplotlib繪製柱狀圖Python
- echarts 柱狀圖 詳解與使用集合Echarts
- Python 利用pandas和matplotlib繪製柱狀折線圖Python
- python-資料分析-Matplotlib-1-基礎圖形(曲線圖-散點-柱狀-堆疊柱狀-餅狀圖-直方圖)Python直方圖
- 柱狀圖
- 九、柱狀圖和3D柱狀圖3D
- 柱狀圖、直方圖、散點圖、餅圖講解直方圖
- PyQtGraph之柱狀圖QT
- oracle 柱狀圖(Histograms)OracleHistogram
- 資料視覺化:圖表篇(1)—— 基本柱狀圖、堆疊柱狀圖視覺化
- Echarts立體柱狀圖Echarts
- JavaScript介面畫柱狀圖JavaScript
- Matplotlib 詳細繪圖繪圖
- Quart2D 畫圖二 (餅狀圖、柱狀圖)
- 垂直柱狀圖(模擬+字串)字串
- matplotlib模組詳解
- ECharts系列:玩轉ECharts之常用圖(折線、柱狀、餅狀、散點、關係、樹)Echarts
- echarts 設定柱狀圖寬度Echarts
- 柱狀圖與執行計劃
- echarts 柱狀圖如何橫向展示Echarts
- R繪圖(06)——帶errorbar的柱狀圖繪圖ErrorORB
- 使用 Flutter 繪製圖表(一)柱狀圖?Flutter
- Echarts根據資料長度變換柱狀圖柱狀的顏色Echarts
- amCharts繪製折線圖和柱狀圖混合
- MPAndroidChart繪製曲線圖、柱狀圖總結Android
- 84. 柱狀圖中最大的矩形
- 繪製帶誤差分析的柱狀圖
- Android 自定義帶動畫的柱狀圖Android動畫
- D3.js —— 繪製柱狀圖(二)JS
- D3.js —— 繪製柱狀圖(一)JS
- echart疊加柱狀圖上顯示文字
- LeetCode_84.柱狀圖中最大的矩形LeetCode
- canvas帶有座標的柱狀圖效果Canvas
- vue實現一個動效柱狀圖Vue
- Highcharts 柱狀圖設定柱體偏移量使柱體緊靠在一起
- 最無恥的 HTTP 常用狀態碼圖解HTTP圖解