CSDN 課程推薦:《Python 數據分析與挖掘》,講師劉順祥,浙江工商大學統計學碩士,數據分析師,曾擔任唯品會大數據部擔任數據分析師一職,負責支付環節的數據分析業務。曾與聯想、亨氏、網魚網咖等企業合作多個企業級項目。
Matplotlib 系列文章:
- Python 數據分析三劍客之 Matplotlib(一):初識 Matplotlib 與其 matplotibrc 配置文件
- Python 數據分析三劍客之 Matplotlib(二):文本描述 / 中文支持 / 畫布 / 網格等基本圖像屬性
- Python 數據分析三劍客之 Matplotlib(三):圖例 / LaTeX / 刻度 / 子圖 / 補丁等基本圖像屬性
- Python 數據分析三劍客之 Matplotlib(四):線性圖的繪製
- Python 數據分析三劍客之 Matplotlib(五):散點圖的繪製
- Python 數據分析三劍客之 Matplotlib(六):直方圖 / 柱狀圖 / 條形圖的繪製
- Python 數據分析三劍客之 Matplotlib(七):餅狀圖的繪製
- Python 數據分析三劍客之 Matplotlib(八):等高線 / 等值線圖的繪製
- Python 數據分析三劍客之 Matplotlib(九):極區圖 / 極座標圖 / 雷達圖的繪製
- Python 數據分析三劍客之 Matplotlib(十):3D 圖的繪製
- Python 數據分析三劍客之 Matplotlib(十一):最熱門最常用的 50 個圖表【譯文】
另有 NumPy、Pandas 系列文章已更新完畢,歡迎關注:
- NumPy 系列文章:https://itrhx.blog.csdn.net/category_9780393.html
- Pandas 系列文章:https://itrhx.blog.csdn.net/category_9780397.html
推薦學習資料與網站(博主參與部分文檔翻譯):
- NumPy 官方中文網:https://www.numpy.org.cn/
- Pandas 官方中文網:https://www.pypandas.cn/
- Matplotlib 官方中文網:https://www.matplotlib.org.cn/
- NumPy、Matplotlib、Pandas 速查表:https://github.com/TRHX/Python-quick-reference-table
文章目錄
這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於 CSDN,作者 TRHX。
博客首頁:https://itrhx.blog.csdn.net/
本文鏈接:https://itrhx.blog.csdn.net/article/details/105828143
未經授權,禁止轉載!惡意轉載,後果自負!尊重原創,遠離剽竊!
【1x00】設置圖例
matplotlib.pyplot.legend()
方法可以爲圖表設置圖例。
基本語法:matplotlib.pyplot.legend(\*args, \*\*kwargs)
部分常見參數:
參數 | 描述 |
---|---|
loc | 圖例在畫布中的位置,默認爲 best,其他取值:best , upper right , upper left , lower left lower right , right , center left , center right lower center , upper center , center 也可以用數字 0 - 10 來表示上述位置 |
bbox_to_anchor | 調整圖例在畫布中的位置,當 loc 達不到我們想要的效果時,就可以使用該參數 該參數接收一個二元數組 (x, y),x 用於控制圖例的左右移動,值越大越向右邊移動 y 用於控制圖例的上下移動,值越大,越向上移動 |
borderaxespad | 圖例距離軸之間的距離,float 類型,默認爲 0.5 |
borderpad | 圖例邊框空白區域大小,float 類型,默認爲 0.4 |
columnspacing | 圖例列間距,float 類型,默認爲 2.0 |
edgecolor | 圖例邊緣線顏色,支持英文顏色名稱及其簡寫、十六進制顏色碼等 更多顏色示例參見官網 Color Demo |
facecolor | 圖例背景顏色,默認繼承自 axes.facecolor 其他顏色,支持英文顏色名稱及其簡寫、十六進制顏色碼等 更多顏色示例參見官網 Color Demo |
fancybox | 是否使用圓形框作爲圖例背景, 默認爲 True |
fontsize | 圖例字體大小,默認爲 medium ,xx-small , x-small , small , medium large , x-large , xx-large , smaller , larger 也可以使用數字來表示字體大小 |
framealpha | 圖例透明度,float 類型,默認爲 0.8,取值範圍:[0, 1] |
handleheight | 圖例的高度 ,float 類型,默認爲 0.7 |
handlelength | 圖例的寬度,float 類型,默認爲 2.0 |
handletextpad | 圖例和圖例文本之間的水平距離,float 類型,默認爲 0.8 |
labelspacing | 不同圖例之間的垂直距離,float 類型,默認爲 0.5 |
shadow | 是否給圖例添加陰影效果,默認爲 False |
【1x01】方法一:指定 label 參數
在畫圖的時候先指定 label
標籤文本,再調用 legend()
方法即可。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]
plt.plot(a, b, label='圖例一') # 指定 a,b 數據的圖例
plt.plot(x, y, label='圖例二') # 指定 x,y 數據的圖例
plt.legend(loc=2, edgecolor='red', facecolor='#F5F5F5') # 指定圖例位置、邊緣線條顏色和背景色
plt.show()
【1x02】方法二:使用 set_label 方法
在畫圖的時候先使用 set_label()
方法指定標籤文本,再調用 legend()
方法即可。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]
line1, = plt.plot(a, b)
line2, = plt.plot(x, y)
line1.set_label('圖例一') # 指定 a,b 數據的圖例
line2.set_label('圖例二') # 指定 x,y 數據的圖例
plt.legend(loc=2, edgecolor='red', facecolor='#F5F5F5') # 指定圖例位置、邊緣線條顏色和背景色
plt.show()
【1x03】方法三:直接使用 legend 方法
直接使用 legend()
方法來指定圖例標籤也可以達到同樣效果,圖例以列表或者元組形式儲存,圖例與繪製圖形的順序一一對應。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]
plt.plot(a, b)
plt.plot(x, y)
plt.legend(['圖例一', '圖例二'], loc=2, edgecolor='red', facecolor='#F5F5F5')
plt.show()
也可以使用兩個元組,將繪製的圖形和圖例一一對應來儲存:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]
line1, = plt.plot(a, b)
line2, = plt.plot(x, y)
plt.legend((line1, line2), ('圖例一', '圖例二'), loc=2, edgecolor='red', facecolor='#F5F5F5')
plt.show()
以上三種方法繪製的圖形均一致:
【2x00】數學公式 LaTeX
LaTeX(LATEX,音譯“拉泰赫”)是一種基於 TeX 的排版系統,常用於生成複雜表格和數學公式,Matplotlib 提供了自己的 TeX 表達式解析器,佈局引擎和字體,佈局引擎基於 Donald Knuth 的 TeX 佈局算法改編。使用數學公式時用 $
將其包圍起來即可。具體的符號與其對應的英文表示參見官方文檔:https://matplotlib.org/tutorials/text/mathtext.html
應用舉例:
import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2*np.pi*t)
plt.title(r'$\alpha_i > \beta_i$', fontsize=20)
plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$', fontsize=20)
plt.xlabel('time (s)')
plt.ylabel('volts (mV)')
plt.plot(t, s)
plt.show()
【3x00】調整 x / y 軸刻度和範圍
在生成圖像時,默認會按照所給的數據均勻設置幾個刻度,如果對默認的刻度不滿意,則可以使用 xticks()
或 yticks()
方法指定刻度值。xlim()
與 ylim()
則可以設置刻度的範圍。
基本語法:
matplotlib.pyplot.xticks([ticks=None, labels=None, \*\*kwargs])
matplotlib.pyplot.yticks([ticks=None, labels=None, \*\*kwargs])
參數 | 描述 |
---|---|
ticks | 數組形式的位置列表,即顯示第 n 個位置的刻度,可選項,若傳遞空列表將刪除所有 xtick / ytick |
labels | 數組形式的值,在對應刻度線顯示的標籤信息。僅當同時傳遞了刻度時,才能傳遞此參數 |
**kwargs | 其他參數參見 Text |
其他參數裏面有一個常用的 rotation
參數,次參數可以用於設置刻度標籤的旋轉角度,對於標籤太長的可以將其旋轉一個角度來顯示。
應用舉例:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
plt.plot(x, y)
# x 軸每隔三個顯示一次刻度,旋轉45°顯示標籤
plt.xticks(range(2, 26, 3), ('the {} ticks'.format(i) for i in range(2, 26, 3)), rotation=45)
plt.show()
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
plt.xlim((0, 30)) # 設置 x 軸刻度範圍
plt.plot(x, y)
plt.show()
【4x00】畫布邊框與座標軸的移動
Matplotlib 所繪製的圖表中的每個繪圖元素,例如線條 Line2D、文字 Text、刻度等在內存中都有一個對象與之對應。
matplotlib.pyplot.gca()
函數用於獲取當前的繪圖區 Axes
(Get Current Axes)
matplotlib.pyplot.gcf()
函數用於獲取當前的畫布 Figure
(Get Current Figure)
例如:matplotlib.pyplot.plot()
實際上會通過 matplotlib.pyplot.gca()
獲得當前的 Axes對象 ax
,然後再調用 ax.plot()
方法實現真正的繪圖。我們可以通過這種方法來實現畫布邊框的隱藏和座標軸的移動。
應用舉例:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 2*np.pi, np.pi/100)
y = np.sin(x)
plt.plot(x, y)
plt.xlabel('X axis')
plt.ylabel('Y axis')
ticks = (0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi)
labels = ('0', r'$\frac{\pi} {2}$', r'$\pi$', r'$\frac{3\pi} {2}$', r'$2\pi$')
plt.xticks(ticks, labels) # 設置 x 座標軸顯示的數據
ax = plt.gca() # 獲取當前的畫布, gca = get current axes
ax.spines['right'].set_visible(False) # 設置右邊框不顯示
ax.spines['top'].set_visible(False) # 設置上邊框不顯示
# ax.spines['top'].set_color('none') # 設置顏色爲無也可以
ax.xaxis.set_ticks_position('bottom') # 設置 x 座標軸的標籤位置
ax.yaxis.set_ticks_position('left') # 設置 y 座標軸的標籤位置
ax.spines['bottom'].set_position(('data', 0)) # 設置 x 軸在 (0, 0) 位置
ax.spines['left'].set_position(('data', 0)) # 設置 y 軸在 (0, 0) 位置
plt.show()
這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於 CSDN,作者 TRHX。
博客首頁:https://itrhx.blog.csdn.net/
本文鏈接:https://itrhx.blog.csdn.net/article/details/105828143
未經授權,禁止轉載!惡意轉載,後果自負!尊重原創,遠離剽竊!
【5x00】創建子圖
子圖的概念:在同一張畫布中創建多個圖像,方便對數據進行對比。
【5x01】方法一:add_subplot()
首先創建一個畫布,然後利用 add_subplot()
方法填充子圖,該方法接收三個參數,前兩個參數表示子圖有幾行幾列,最後一個參數表示第幾個子圖,如:fig.add_subplot(221)
表示總共有兩行兩列(2x2=4)一共4個子圖,當前是第一個子圖。若子圖大於9個則用逗號隔開即可。
應用舉例:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
fig = plt.figure(figsize=(12, 6))
ax1 = fig.add_subplot(221) # 第 1 個子圖
ax1.plot(x, x)
ax2 = fig.add_subplot(222) # 第 2 個子圖
ax2.plot(x, -x)
ax3 = fig.add_subplot(223) # 第 3 個子圖
ax3.plot(x, x ** 2)
ax4 = fig.add_subplot(224) # 第 4 個子圖
ax4.plot(-x, x ** 2)
plt.show()
【5x02】方法二:pyplot.subplot()
matplotlib.pyplot.subplot()
方法和 add_subplot()
方法有點兒類似,同樣接收三個參數,前兩個參數表示子圖有幾行幾列,最後一個參數表示第幾個子圖。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
plt.figure(figsize=(12, 6))
plt.subplot(221) # 第 1 個子圖
plt.plot(x, x)
plt.subplot(222) # 第 2 個子圖
plt.plot(x, x ** 2)
plt.subplot(223) # 第 3 個子圖
plt.plot(x, x ** 3)
plt.subplot(224) # 第 4 個子圖
plt.plot(x, x ** 4)
plt.show()
【5x03】方法三:pyplot.subplots()
matplotlib.pyplot.subplots()
函數會將畫布分割成指定的列和行,分割後依次在各個區域畫圖即可。注意與 matplotlib.pyplot.subplot()
略有差別。
fig, axes = plt.subplots
的意思是:plt.subplots
方法會返回一個包含 figure(畫布) 和 axes(繪圖區) 對象的元組,fig 和 axes 參數分別接收這兩個對象,後期對不同繪圖區進行處理即可。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
fig, axes = plt.subplots(figsize=(12, 6), nrows=2, ncols=2) # 將畫布分割爲2行2列,起始值爲0
axes[0][0].plot(x, x) # 繪製第1行第1列
axes[0][1].plot(x, -x) # 繪製第1行第2列
axes[1][0].plot(-x, x ** 2) # 繪製第2行第1列
axes[1][1].plot(x, -x ** 2) # 繪製第2行第2列
plt.show()
【6x00】填充補丁
matplotlib.patches
可用於在畫布上填充圓形、長方形、橢圓形、多邊形等多種圖像補丁。
官方文檔:https://matplotlib.org/api/patches_api.html
類 | 描述 |
---|---|
matplotlib.patches.Arc(xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs) | 橢圓弧 |
matplotlib.patches.Arrow(x, y, dx, dy, width=1.0, **kwargs) | 箭頭 |
matplotlib.patches.Circle(xy, radius=5, **kwargs) | 圓 |
matplotlib.patches.Ellipse(xy, width, height, angle=0, **kwargs) | 橢圓 |
matplotlib.patches.CirclePolygon(xy, radius=5, resolution=20, **kwargs) | 近似多邊形的圓形面片 |
matplotlib.patches.Polygon(xy, closed=True, **kwargs) | 不規則多邊形 |
matplotlib.patches.Rectangle(xy, width, height, angle=0.0, **kwargs) | 矩形 |
matplotlib.patches.RegularPolygon(xy, numVertices, radius=5, orientation=0, **kwargs) | 正多邊形 |
matplotlib.patches.Shadow(patch, ox, oy, props=None, **kwargs) | 創建給定補丁的陰影 |
matplotlib.patches.Wedge(center, r, theta1, theta2, width=None, **kwargs) | 楔形 |
應用舉例:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathes
x = np.arange(0.0, 2.0, 0.01)
y = np.sin(2*np.pi*x)
# 獲取當前繪圖區(gca = Get Current Axes
ax = plt.gca()
# 圓形:圓點(0.2, -0.25),半徑0.2,紅色
circle = mpathes.Circle((0.2, -0.25), 0.2, color='r')
# 長方形:左側和底部座標(0.25, 0.75),寬0.25,高0.15,透明度0.5
rect = mpathes.Rectangle((0.25, 0.75), 0.25, 0.15, alpha=0.5)
# 正多邊形:中心點座標(1.0, 0),頂點數6,中心到每個頂點的距離0.25
regular_polygon = mpathes.RegularPolygon((1.0, 0), 6, 0.25, color='g')
# 不規則多邊形:polygon_point 爲要連接的點的座標
polygon_point = [[1.5, -0.75], [1.75, -1], [2.0, 0], [1.5, -0.25]]
polygon = mpathes.Polygon(polygon_point, color='#FF69B4', alpha=0.3)
# 橢圓形:中心點座標(1.25, 0.75),橫軸長度0.4,垂直軸長度0.2
ellipse = mpathes.Ellipse((1.25, 0.75), 0.4, 0.2, color='y')
# 將補丁添加到當前繪圖區
ax.add_patch(circle)
ax.add_patch(rect)
ax.add_patch(regular_polygon)
ax.add_patch(polygon)
ax.add_patch(ellipse)
plt.xlabel('x axis label')
plt.ylabel('y axis label')
plt.grid()
plt.plot(x, y)
plt.show()
【7x00】保存圖像
matplotlib.pyplot.savefig()
方法可以將繪製的圖像保存到本地,支持多種格式:eps, pdf, pgf, png, ps, raw, rgba, svg, svgz。
注意:因爲調用 plt.show()
函數後,會創建一個新的空白的圖片,所以在保存圖片時注意要在 plt.show()
前調用 plt.savefig()
基本語法:matplotlib.pyplot.savefig(fname, dpi=None, facecolor='w', edgecolor='w', format=None, transparent=False)
參數 | 描述 |
---|---|
fname | str 類型 / 文件路徑 / 類似文件的對象 如果未設置格式,則根據 fname 的擴展名(如果有)和 rcParams[“savefig.format”] = ‘png’ 推斷輸出格式如果設置了格式,則它將確定輸出格式 |
dpi | 保存圖片的像素(dpi),以每英寸點數爲單位。如果爲 None,則默認取 rcParams[’savefig.dpi’] = ‘figure’ |
facecolor | 保存圖片的畫布顏色,默認爲 white |
edgecolor | 保存圖片的邊緣顏色,默認爲 white |
format | 保存圖片的格式,未設置則取 fname 中的格式 |
transparent | 保存圖片的背景是否透明 |
應用舉例:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
x = range(2, 26, 2)
y = range(0, 12)
a = [5, 10, 15, 20, 25, 30]
b = [3, 4, 5, 6, 7, 8]
line1, = plt.plot(a, b)
line2, = plt.plot(x, y)
plt.legend((line1, line2), ('圖例一', '圖例二'), loc=2, edgecolor='red', facecolor='#F5F5F5')
plt.savefig('D:\\data\\pic.png', transparent=True) # 保存爲透明文件
plt.show()
這裏是一段防爬蟲文本,請讀者忽略。
本文原創首發於 CSDN,作者 TRHX。
博客首頁:https://itrhx.blog.csdn.net/
本文鏈接:https://itrhx.blog.csdn.net/article/details/105828143
未經授權,禁止轉載!惡意轉載,後果自負!尊重原創,遠離剽竊!