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
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!