Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制
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】等高線概念
- 【2x00】理解 numpy.meshgrid()
- 【3x00】繪制方法 matplotlib.pyplot.contour()
- 【4x00】填充方法 matplotlib.pyplot.contourf()
- 【5x00】標記方法 matplotlib.pyplot.clabel()
- 【6x00】Colormap 取值
- 【7x00】簡單示例
- 【8x00】添加標記
- 【9x00】輪廓線顏色和樣式
- 【10x00】顏色填充
這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106066852 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
【1x00】等高線概念
參考百度百科,等高線概念總結如下:等高線指的是地形圖上高程相等的相鄰各點所連成的閉合曲線。把地面上海拔高度相同的點連成的閉合曲線,并垂直投影到一個水平面上,并按比例縮繪在圖紙上,就得到等高線。等高線也可以看作是不同海拔高度的水平面與實際地面的交線,所以等高線是閉合曲線。在等高線上標注的數字為該等高線的海拔。
- 位于同一等高線上的地面點,海拔高度相同。但海拔高度相同的點不一定位于同一條等高線上;
- 在同一幅圖內,除了陡崖以外,不同高程的等高線不能相交;
- 在圖廓內相鄰等高線的高差一般是相同的,因此地面坡度與等高線之間的等高線平距成反比,等高線平距愈小,等高線排列越密,說明地面坡度越大;等高線平距愈大,等高線排列越稀,則說明地面坡度愈小;
- 等高線是一條閉合的曲線,如果不能在同一幅內閉合,則必在相鄰或者其他圖幅內閉合。
- 等高線經過山脊或山谷時改變方向,因此,山脊線或者山谷線應垂直于等高線轉折點處的切線,即等高線與山脊線或者山谷線正交。
在 Matplotlib 等高線的繪制中,需要傳遞三個基本參數:某個點的 x、y 軸坐標以及其高度。
【2x00】理解 numpy.meshgrid()
numpy.meshgrid() 方法用于生成網格點坐標矩陣。
import numpy as npa = np.array([1, 2, 3]) b = np.array([7, 8, 9]) res = np.meshgrid(a, b) print(res)輸出結果:
[array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]),array([[7, 7, 7],[8, 8, 8],[9, 9, 9]])]給定兩個數組,a[1, 2, 3] 和 b[7, 8, 9],a 作為 x 軸數據,b 作為 y 軸數據,那么一共可以繪制出 9 個點: (1,7)、(1,8)、(1,9)、(2,7)、(2,8)、(2,9)、(3,7)、(3,8)、(3,9),而 numpy.meshgrid() 方法就是起這樣的作用,返回的兩個二維數組,橫坐標矩陣 a 中的每個元素,與縱坐標矩陣 b 中對應位置元素,共同構成一個點的完整坐標。
因為在 matplotlib.pyplot.contour() 等高線繪制函數中接收的是二維坐標信息,所以在繪制等高線圖之前要將原數據經過 numpy.meshgrid() 方法處理,也可以自己構建類似于上述的二維數組。
【3x00】繪制方法 matplotlib.pyplot.contour()
matplotlib.pyplot.contour() 方法可用于繪制等高線圖。
基本語法:matplotlib.pyplot.contour(\*args, data=None, \*\*kwargs)
通用格式:matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)
基本參數:
| X, Y | 數組形式的點的 x 和 y 軸坐標,兩者都必須是二維的,形狀與 Z 相同 |
| Z | 繪制輪廓的高度值,二維數組,每個元素是其對應點的高度 |
| levels | 確定等高線的數目和位置,如果是整數 N,則使用 N 個數據間隔,即繪制 N+1 條等高線 如果是數組形式,則繪制指定的等高線。值必須按遞增順序排列 |
其他參數:
| colors | 等高線的顏色,顏色字符串或顏色序列 |
| cmap | 等高線的顏色,字符串或者 Colormap 通常包含一系列的漸變色或其他顏色組合,取值參見【6x00】Colormap 取值 |
| alpha | 透明度,介于0(透明)和1(不透明)之間 |
| origin | 通過指定 Z[0,0] 的位置來確定 Z 的方向和確切位置,僅當未指定 X, Y 時才有意義 None:Z[0,0] 位于左下角的 X=0, Y=0 處 'lower':Z [0, 0] 位于左下角的 X = 0.5, Y = 0.5 處 'upper':Z[0,0] 位于左上角的 X=N+0.5, Y=0.5 處 'image':使用 rcParams[“image.origin”] = 'upper'的值 |
| antialiased | 是否啟用抗鋸齒渲染,默認 True |
| linewidths | 等高線的線寬,如果是數字,則所有等高線都將使用此線寬 如果是序列,則將按指定的順序以升序打印線寬 默認為 rcParams[“lines.linewidth”] = 1.5 |
| linestyles | 等高線的樣式,如果線條顏色為單色,則負等高線默認為虛線 '-' or 'solid', '--' or 'dashed', '-.' or 'dashdot' ':' or 'dotted', 'none' or ' ' or '' |
【4x00】填充方法 matplotlib.pyplot.contourf()
matplotlib.pyplot.contourf() 方法與 matplotlib.pyplot.contour() 的區別在于:contourf() 會對等高線間的區域進行顏色填充(filled contours)。除此之外兩者的函數簽名和返回值都相同。
基本語法:matplotlib.pyplot.contourf(\*args, data=None, \*\*kwargs)
通用格式:matplotlib.pyplot.contour([X, Y,] Z, [levels], **kwargs)
基本參數:
| X, Y | 數組形式的點的 x 和 y 軸坐標,兩者都必須是二維的,形狀與 Z 相同 |
| Z | 繪制輪廓的高度值,二維數組,每個元素是其對應點的高度 |
| levels | 確定等高線的數目和位置,如果是整數 N,則使用 N 個數據間隔,即繪制 N+1 條等高線 如果是數組形式,則繪制指定的等高線。值必須按遞增順序排列 |
其他參數:
| colors | 等高線的填充顏色,顏色字符串或顏色序列 |
| cmap | 等高線的填充顏色,字符串或者 Colormap 通常包含一系列的漸變色或其他顏色組合,取值參見【6x00】Colormap 取值 |
| alpha | 透明度,介于0(透明)和1(不透明)之間 |
| origin | 通過指定 Z[0,0] 的位置來確定 Z 的方向和確切位置,僅當未指定 X, Y 時才有意義 None:Z[0,0] 位于左下角的 X=0, Y=0 處 'lower':Z [0, 0] 位于左下角的 X = 0.5, Y = 0.5 處 'upper':Z[0,0] 位于左上角的 X=N+0.5, Y=0.5 處 'image':使用 rcParams[“image.origin”] = 'upper'的值 |
| antialiased | 是否啟用抗鋸齒渲染,默認 True |
| linewidths | 等高線的線寬,如果是數字,則所有等高線都將使用此線寬 如果是序列,則將按指定的順序以升序打印線寬 默認為 rcParams[“lines.linewidth”] = 1.5 |
| linestyles | 等高線的樣式,如果線條顏色為單色,則負等高線默認為虛線 '-' or 'solid', '--' or 'dashed', '-.' or 'dashdot' ':' or 'dotted', 'none' or ' ' or '' |
【5x00】標記方法 matplotlib.pyplot.clabel()
matplotlib.pyplot.clabel(CS, \*args, \*\*kwargs) 方法可用于標記等高線圖。
| CS | ContourSet(等高線集)對象,即 pyplot.contour() 返回的對象 |
| levels | 需要標記的等高線集,數組類型,如果未指定則默認標記所有等高線 |
| fontsize | 標記的字體大小,可選項: 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large' |
| colors | 標記的顏色,顏色字符串或顏色序列 |
| inline | 是否在標簽位置移除輪廓顯示,bool 類型,默認 True |
| inline_spacing | 標簽位置移除輪廓的寬度,float 類型,默認為 5 |
| fmt | 標簽的格式字符串。str 或 dict 類型,默認值為 %1.3f |
| rightside_up | 是否將標簽旋轉始終與水平面成正負90度,bool 類型,默認 True |
| use_clabeltext | 默認為 False,如果為 True,則使用 ClabelText 類(而不是 Text)創建標簽 ClabelText 在繪圖期間重新計算文本的旋轉角度,如果軸的角度發生變化,則可以使用此功能 |
這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106066852 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
【6x00】Colormap 取值
matplotlib.pyplot.contour() 和 matplotlib.pyplot.contourf() 中 cmap 參數用于設置等高線的顏色,取值通常為 Colormap 中的值,通常包含一系列的漸變色或其他顏色組合。具體參加下圖。
官方文檔:https://matplotlib.org/tutorials/colors/colormaps.html
【7x00】簡單示例
import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2.0, 2.0, 0.01) y = np.arange(-2.0, 2.0, 0.01) m, n = np.meshgrid(x, y) # 生成網格點坐標矩陣# 指定一個函數用于計算每個點的高度,也可以直接使用二維數組儲存每個點的高度 def f(a, b):return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)# 繪制等高線圖,8 個數據間隔,顏色為黑色 plt.contour(m, n, f(m, n), 8, colors='k') plt.title('等高線圖簡單示例') plt.xlabel('x axis label') plt.ylabel('y axis label')plt.show()【8x00】添加標記
matplotlib.pyplot.clabel() 方法用于給等高線添加標記。
import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2.0, 2.0, 0.01) y = np.arange(-2.0, 2.0, 0.01) m, n = np.meshgrid(x, y) # 生成網格點坐標矩陣# 指定一個函數用于計算每個點的高度,也可以直接使用二維數組儲存每個點的高度 def f(a, b):return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)# 繪制等高線圖,8 個數據間隔,顏色為黑色 C = plt.contour(m, n, f(m, n), 8, colors='k') # 添加標記,標記處不顯示輪廓線,顏色為黑紅綠藍四種,保留兩位小數 plt.clabel(C, inline=True, colors=['k', 'r', 'g', 'b'], fmt='%1.2f') plt.title('等高線圖添加標記示例') plt.xlabel('x axis label') plt.ylabel('y axis label')plt.show()【9x00】輪廓線顏色和樣式
matplotlib.pyplot.contour() 方法中,colors 參數即可為等高線輪廓設置顏色,可以是單色,也可以是一個顏色列表,linestyles 參數可以設置輪廓線樣式,注意,如果線條顏色為單色,則負等高線(高度值為負)默認為虛線。
import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2.0, 2.0, 0.01) y = np.arange(-2.0, 2.0, 0.01) m, n = np.meshgrid(x, y) # 生成網格點坐標矩陣# 指定一個函數用于計算每個點的高度,也可以直接使用二維數組儲存每個點的高度 def f(a, b):return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)colors = ['k', 'r', 'g', 'b'] # 繪制等高線圖,8 個數據間隔,顏色為黑色,線條樣式為 -- C = plt.contour(m, n, f(m, n), 8, colors=colors, linestyles='--') # 添加標記,標記處不顯示輪廓線,顏色為黑紅綠藍四種,保留兩位小數 plt.clabel(C, inline=True, colors=colors, fmt='%1.2f') plt.title('等高線圖設置顏色/樣式示例') plt.xlabel('x axis label') plt.ylabel('y axis label')plt.show()如果想啟用漸變色,則可以設置 cmap,取值參見【6x00】Colormap 取值,colorbar() 方法可以顯示顏色對照條。
import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2.0, 2.0, 0.01) y = np.arange(-2.0, 2.0, 0.01) m, n = np.meshgrid(x, y) # 生成網格點坐標矩陣# 指定一個函數用于計算每個點的高度,也可以直接使用二維數組儲存每個點的高度 def f(a, b):return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)# 繪制等高線圖,8 個數據間隔,顏色為 plasma C = plt.contour(m, n, f(m, n), 8, cmap='plasma') # 添加標記,標記處不顯示輪廓線,顏色為黑色,保留兩位小數 plt.clabel(C, inline=True, colors='k', fmt='%1.2f') # 顯示顏色條 plt.colorbar() plt.title('等高線圖設置漸變色示例') plt.xlabel('x axis label') plt.ylabel('y axis label')plt.show()【10x00】顏色填充
matplotlib.pyplot.contourf() 方法用于對等高線之間的地方進行顏色填充。
import numpy as np import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2.0, 2.0, 0.01) y = np.arange(-2.0, 2.0, 0.01) m, n = np.meshgrid(x, y) # 生成網格點坐標矩陣# 指定一個函數用于計算每個點的高度,也可以直接使用二維數組儲存每個點的高度 def f(a, b):return (1 - b ** 5 + a ** 5) * np.exp(-a ** 2 - b ** 2)# 繪制等高線圖,8 個數據間隔,顏色為 plasma plt.contourf(m, n, f(m, n), 8, cmap='plasma') C = plt.contour(m, n, f(m, n), 8, cmap='plasma') # 添加標記,標記處不顯示輪廓線,顏色為黑色,保留兩位小數 plt.clabel(C, inline=True, colors='k', fmt='%1.2f') # 顯示顏色條 plt.colorbar() plt.title('等高線圖顏色填充示例') plt.xlabel('x axis label') plt.ylabel('y axis label')plt.show()這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106066852 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!
總結
以上是生活随笔為你收集整理的Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《糖豆人》免费后匹配系统崩了 E宝自嘲变
- 下一篇: 理想L9预订多火爆?网友:第一次见抢46