Matplotlib画等高线图

Matplotlib画等高线图

参考:matplotlib contour

matplotlib是Python中常用的绘图库,它提供了丰富的功能和灵活的API,可以用来创建各种类型的图表。在这篇文章中,我们将重点介绍matplotlib中的contour功能。等高线图是一种常用的二维数据可视化方式,它能够直观地展示数据的分布和变化规律。通过等高线图,我们可以清晰地看出数据的高低变化,从而更好地理解数据的含义。

基本等高线图

首先,让我们来看一个简单的基本等高线图示例。假设我们有一组二维数据,我们可以使用matplotlib中的contour函数来绘制等高线图。下面是一个简单的例子:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contour(X, Y, Z)
plt.show()

Output:

Matplotlib画等高线图

运行以上代码,我们可以看到绘制出的基本等高线图。在这个例子中,我们使用了np.linspace函数生成一组x和y的值,并用np.meshgrid函数将这些值组合成网格。然后我们计算出z值,即sin(x) * cos(y)。最后,我们使用plt.contour函数绘制等高线图。

自定义等高线图样式

在等高线图中,我们可以对图形进行一些自定义样式,以展示更多有关数据的信息。例如,我们可以添加颜色条、修改线型、改变标签等。下面是一个自定义等高线图的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contourf(X, Y, Z, levels=20, cmap='coolwarm')
plt.colorbar()
plt.title('Customized Contour Plot')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用了plt.contourf函数绘制填充颜色的等高线图,并使用cmap参数设置颜色映射。我们还使用levels参数设置等高线的数量。最后,我们通过plt.colorbar函数添加颜色条,并通过plt.titleplt.xlabelplt.ylabel函数添加标题和坐标轴标签。

等高线图的子图布局

有时候我们需要在一个图形中展示多个等高线图,可以使用子图布局来实现。下面是一个展示多个等高线图的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

fig, axs = plt.subplots(2, 2, figsize=(10, 10))

for i in range(2):
    for j in range(2):
        Z = np.sin(X) * np.cos(Y + i*j*np.pi/2)
        axs[i, j].contourf(X, Y, Z, levels=20, cmap='coolwarm')
        axs[i, j].set_title(f'Plot {i+1}-{j+1}')

plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.subplots函数创建一个2×2的子图布局,并在每个子图中绘制不同的等高线图。通过循环遍历每个子图,我们可以方便地定制每个子图的样式和数据。

等高线图与散点图结合

除了单独绘制等高线图,还可以将其与其他类型的图表结合起来。例如,我们可以将等高线图与散点图结合,以展示数据的分布和变化。下面是一个等高线图与散点图结合的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

x1 = np.random.uniform(-2*np.pi, 2*np.pi, 100)
y1 = np.random.uniform(-2*np.pi, 2*np.pi, 100)
z1 = np.sin(x1) * np.cos(y1)

plt.contourf(X, Y, Z, levels=20, cmap='coolwarm')
plt.scatter(x1, y1, c=z1, cmap='coolwarm', label='Scatter Plot')
plt.colorbar()
plt.title('Contour Plot with Scatter Plot')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们首先生成一组随机数据,并使用plt.scatter函数绘制散点图。然后在等高线图上使用plt.contourf函数绘制等高线图,并使用plt.scatter函数将散点图与等高线图结合起来。通过这种方式,我们可以更直观地展示数据的分布。

不规则数据的等高线图

有时候,我们的数据并不是规则网格状的,而是不规则的点集。在这种情况下,我们可以使用tricontour函数来绘制不规则数据的等高线图。下面是一个不规则数据的等高线图示例:

from matplotlib.tri import Triangulation
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

x = np.random.rand(50)
y = np.random.rand(50)
tri = Triangulation(x, y)

z = np.sin(x) * np.cos(y)

plt.tricontourf(tri, z, levels=20, cmap='coolwarm')
plt.colorbar()
plt.title('Irregular Contour Plot')
plt.show()

在这个例子中,我们首先使用Triangulation函数创建一个不规则的三角形网格,然后使用plt.tricontourf函数绘制不规则数据的等高线图。通过这种方式,我们可以适应更加复杂的数据结构。

填充等高线图

在等高线图中,我们不仅可以绘制线条,还可以填充等高线图形成区域。下面是一个填充等高线图的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contourf(X, Y, Z, levels=20, cmap='coolwarm')
plt.contour(X, Y, Z, colors='black', linewidths=2)
plt.colorbar()
plt.title('Filled Contour Plot')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们先使用plt.contourf函数绘制填充等高线图,再使用plt.contour函数绘制线条,以突出等高线的形状。

透明度设置

在等高线图中,我们还可以通过设置透明度来调整图形的显示效果。下面是一个设置透明度的等高线图示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contourf(X, Y, Z, levels=20, alpha=0.5)
plt.colorbar()
plt.title('Contour Plot with Transparency')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.contourf函数绘制等高线图,并通过alpha参数设置透明度为0.5,使得图形半透明显示。

自定义等高线线型

除了调整颜色和填充方式外,我们还可以自定义等高线的线型。下面是一个自定义等高线线型的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contour(X, Y, Z, levels=10, linestyles='dashed')
plt.colorbar()
plt.title('Contour Plot with Custom Line Style')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.contour函数绘制等高线图,并通过linestyles参数设置线型为虚线,以使得等高线具有不同的线型。

等高线的标签设置

在等高线图中,我们可以通过设置标签来展示每个等高线的数值。下面是一个设置等高线标签的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

CS = plt.contour(X, Y, Z, levels=10)
plt.clabel(CS, inline=True, fontsize=8, colors='black')
plt.colorbar()
plt.title('Contour Plot with Labels')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.contour函数绘制等高线图,并通过plt.clabel函数设置标签。通过调整inline参数、fontsize参数和colors参数,我们可以自定义等高线标签的显示方式。

等高线的边框设置

在等高线图中,我们还可以设置等高线的边框样式。下面是一个设置等高线边框样式的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contour(X, Y, Z, levels=10, linewidths=2, linestyles='dotted')
plt.colorbar()
plt.title('Contour Plot with Custom Border Style')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.contour函数绘制等高线图,并通过linewidths参数和linestyles参数设置边框的线宽和线型,以使得等高线具有不同的边框样式。

等高线间距设置

在等高线图中,我们还可以通过设置等高线的间距来调整等高线的密集程度。下面是一个设置等高线间距的示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contour(X, Y, Z, levels=np.linspace(-1,1,21))
plt.colorbar()
plt.title('Contour Plot with Custom Spacing')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用np.linspace函数生成一组间距均匀的等高线数值,并通过levels参数设置等高线的间距,以调整等高线的密集程度。

等高线图的坐标变换

在等高线图中,我们还可以对坐标进行变换,以展示不同的数据视角。下面是一个进行坐标变换的等高线图示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) * np.cos(Y)

plt.contour(X, Y, Z, levels=10)
plt.gca().set_aspect('equal')
plt.gca().invert_yaxis()
plt.colorbar()
plt.title('Contour Plot with Coordinate Transformation')
plt.show()

Output:

Matplotlib画等高线图

在这个例子中,我们使用plt.gca().set_aspect函数设置坐标轴比例为相等,并使用plt.gca().invert_yaxis函数反转y轴方向,以展示不同的数据视角。

通过以上示例,我们可以看到matplotlib中等高线图的基本绘制方法及常用样式设置。使用等高线图能够直观地展示数据的分布和变化规律,帮助我们更好地理解数据的含义,并为数据分析和可视化提供了强大的工具。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程