[Python3] Matplotlib —— (五) 密度图与等高线图

文章目录

    • 六、密度图与等高线图
      • 三维函数的可视化
        • 1. 用等高线图可视化三维数据
        • 2. 用彩色等高线可视化三维数据
        • 3. 带填充色的三维数据可视化
        • 4. 重新渲染三维数据彩色图
        • 5. 在彩色图上加上带数据标签的等高线


[ Matplotlib version: 3.2.1 ]


六、密度图与等高线图

在二维图上用等高线图或者彩色图来表示三维数据是个不错的方法。

Matplotlib提供三个函数来解决这个问题:

  • plt.contour画等高线图
  • plt.contourf画带有填充色的等高线图(filled contour plot)的色彩
  • plt.imshow显示图形
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-white')
import numpy as np

三维函数的可视化

1. 用等高线图可视化三维数据

# 首先用函数z=f(x,y)演示一个等高线图
def f(x, y):
	return np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

等高线图可以用plt.contour函数来创建。它需要三个参数:x轴、y轴、z轴三个坐标轴的网格数据。x轴与y轴表示图形中的位置,而z轴将通过等高线的等级来表示。

np.meshgrid函数准备数据是最简单的方法,它可以从一维数组构建二维网格数据

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 40)

X, Y = np.meshgrid(x, y)
Z = f(X, Y)

# 生成等高线图
plt.contour(X, Y ,Z, colors='black')

[Python3] Matplotlib —— (五) 密度图与等高线图_第1张图片

  • 当图形中只使用一种颜色时,默认使用虚线表示负数,使用实线表示整数。

2. 用彩色等高线可视化三维数据

可以用cmap参数设置一个线条配色方案自定义颜色,还可以让更多的线条显示不同的颜色(plt.cm+Tab查看更多颜色)

# 可以将数据范围等分为20份,并用不同颜色表示
plt.contour(X, Y, Z, 20, cmap='RdGy')

[Python3] Matplotlib —— (五) 密度图与等高线图_第2张图片

  • 使用RdGy(红-灰,Red-Gray缩写)配色方案,对数据集中度的显示效果比较好
  • 不足:线条之间的间隙还是有点大,可以通过plt.contourf()函数来填充等高线图

3. 带填充色的三维数据可视化

plt.contourf(X, Y, Z, 20, cmap='RdGy')
plt.colorbar()

[Python3] Matplotlib —— (五) 密度图与等高线图_第3张图片

  • 通过颜色条可以清晰地看出,黑色区域是“波峰”(peak),红色区域是“波谷”(valley)
  • 不足:颜色看起来不自然(由于颜色的改变是一个离散而非连续的过程)
  • 可以通过plt.imshow()函数来处理,将二维数组渲染成渐变图

4. 重新渲染三维数据彩色图

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy')
plt.colorbar()
plt.axis(aspect='image')

[Python3] Matplotlib —— (五) 密度图与等高线图_第4张图片

函数plt.imshow()

  • plt.imshow()不支持用x轴和y轴数据设置网格,而是必须通过extent参数设置图形的坐标范围[xmin, xmax, ymin, ymax]
  • plt.imshow()默认使用标准的图形数组定义,就是原点位于左上角,而不是绝大多数等高线图中使用的左下角,这一点在显示网格数据图形的时候必须调整
  • plt.imshow()会自动调整坐标轴的精度以使用数据显示,可以通过axis(aspect='image')来设置x轴与y轴的单位

5. 在彩色图上加上带数据标签的等高线

contours = plt.contour(X, Y, Z, 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)

plt.imshow(Z, extent=[0, 5, 0, 5], origin='lower', cmap='RdGy', alpha=0.5)
plt.colorbar()

[Python3] Matplotlib —— (五) 密度图与等高线图_第5张图片

  • 将等高线图与彩色图组合起来,需要用衣服背景色半透明的彩色图(通过alpha参数设置透明度)
  • 与另一幅坐标轴相同、带数据标签的等高线图叠放在一起(plt.clabel()函数实现)

Matplotlib 相关阅读:

[Python3] Matplotlib —— (一) 入门基础
[Python3] Matplotlib —— (二) 简易线形图
[Python3] Matplotlib —— (三) 简易散点图
[Python3] Matplotlib —— (四) 可视化异常处理


总结自《Python数据科学手册》

你可能感兴趣的:(Python3,Data,Science,#,Matplotlib)