CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个企业级项目。
Matplotlib 系列文章:
另有 NumPy、Pandas 系列文章已更新完毕,欢迎关注:
推荐学习资料与网站(博主参与部分文档翻译):
这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/106066852
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
参考百度百科,等高线概念总结如下:等高线指的是地形图上高程相等的相邻各点所连成的闭合曲线。把地面上海拔高度相同的点连成的闭合曲线,并垂直投影到一个水平面上,并按比例缩绘在图纸上,就得到等高线。等高线也可以看作是不同海拔高度的水平面与实际地面的交线,所以等高线是闭合曲线。在等高线上标注的数字为该等高线的海拔。
在 Matplotlib 等高线的绘制中,需要传递三个基本参数:某个点的 x、y 轴坐标以及其高度。
numpy.meshgrid()
方法用于生成网格点坐标矩阵。
import numpy as np
a = 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()
方法处理,也可以自己构建类似于上述的二维数组。
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 '' |
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 '' |
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
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
matplotlib.pyplot.contour()
和 matplotlib.pyplot.contourf()
中 cmap
参数用于设置等高线的颜色,取值通常为 Colormap 中的值,通常包含一系列的渐变色或其他颜色组合。具体参加下图。
官方文档:https://matplotlib.org/tutorials/colors/colormaps.html
import numpy as np
import matplotlib.pyplot as plt
plt.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()
matplotlib.pyplot.clabel()
方法用于给等高线添加标记。
import numpy as np
import matplotlib.pyplot as plt
plt.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()
matplotlib.pyplot.contour()
方法中,colors
参数即可为等高线轮廓设置颜色,可以是单色,也可以是一个颜色列表,linestyles
参数可以设置轮廓线样式,注意,如果线条颜色为单色,则负等高线(高度值为负)默认为虚线。
import numpy as np
import matplotlib.pyplot as plt
plt.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 plt
plt.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()
matplotlib.pyplot.contourf()
方法用于对等高线之间的地方进行颜色填充。
import numpy as np
import matplotlib.pyplot as plt
plt.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
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!