日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性

發布時間:2023/12/10 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

文章目錄

    • 【1x00】設置圖例
      • 【1x01】方法一:指定 label 參數
      • 【1x02】方法二:使用 set_label 方法
      • 【1x03】方法三:直接使用 legend 方法
    • 【2x00】數學公式 LaTeX
    • 【3x00】調整 x / y 軸刻度和范圍
    • 【4x00】畫布邊框與坐標軸的移動
    • 【5x00】創建子圖
      • 【5x01】方法一:add_subplot()
      • 【5x02】方法二:pyplot.subplot()
      • 【5x03】方法三:pyplot.subplots()
    • 【6x00】填充補丁
    • 【7x00】保存圖像


這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 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 pltplt.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 pltplt.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 pltplt.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 pltplt.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 pltt = 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 pltplt.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 pltplt.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 npx = 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 pltx = 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 pltx = 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 pltx = np.arange(100) fig, axes = plt.subplots(figsize=(12, 6), nrows=2, ncols=2) # 將畫布分割為2行2列,起始值為0axes[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 mpathesx = 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)

參數描述
fnamestr 類型 / 文件路徑 / 類似文件的對象
如果未設置格式,則根據 fname 的擴展名(如果有)和 rcParams[“savefig.format”] = ‘png’ 推斷輸出格式
如果設置了格式,則它將確定輸出格式
dpi保存圖片的像素(dpi),以每英寸點數為單位。如果為 None,則默認取 rcParams[’savefig.dpi’] = ‘figure’
facecolor保存圖片的畫布顏色,默認為 white
edgecolor保存圖片的邊緣顏色,默認為 white
format保存圖片的格式,未設置則取 fname 中的格式
transparent保存圖片的背景是否透明

應用舉例:

import matplotlib.pyplot as pltplt.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 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!

總結

以上是生活随笔為你收集整理的Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。