📜  等高线图

📅  最后修改于: 2022-05-13 01:55:24.861000             🧑  作者: Mango

等高线图

等高线图是一种通过以 2-D 格式绘制称为等高线的恒定 Z 切片来可视化 3-D 表面的图形方法。等高线图是 3-D 曲面图的替代方法

等高线图由下式构成:

  • 纵轴:自变量2
  • 横轴:自变量1
  • :iso 响应值,可以通过帮助 (x,y) 计算。

自变量通常限于规则网格。确定正确 iso 响应值的实际技术相当复杂,并且几乎总是由计算机生成。

等高线图用于描绘与 X 和 Y 值相比 Z 值的变化。如果数据(或函数)没有形成规则网格,您通常需要执行二维插值以形成规则网格。

对于一个变量数据,运行序列/直方图被认为是必要的。对于二变量数据,散点图被认为是必要的。等高线图还可以使用极坐标 (r,theta) 代替传统的直角坐标 (x, y, z)。

等高线图的类型:

  • 矩形轮廓图:二维矩形画布中二维图的投影。它是等高线图的最常见形式。
  • 极地等高线图极地等高线图是 使用极坐标rtheta绘制。这里的响应变量是将 r 和 theta 传递给给定函数时生成的值的集合,其中 r 是距原点的距离,theta 是距 x 正轴的角度。
  • 三元等高线图三元等高线图用于以实心三角形的形式表示3个解释变量与响应变量之间的关系。

轮廓图可以用不同的编程语言绘制:

  • Python/ Matplotlib :可以使用plt.contourplt.contourf函数绘制轮廓图,其中pltmatplotlib.pyplot 。这两者的区别在于plot.contour生成的空心等高线图,plt.contourf生成的填充。
  • Matlabcontourf(2d-plot)和contour3(3D-contour)等函数可用于等高线绘图
  • R : 可以用 R 中的fill.contour函数创建等高线图。

实现:

  • 矩形等高线图:以下是在Python和 matplotlib 中绘制矩形等高线图的示例代码。
Python3
#  imports
import numpy as np
import matplotlib.pyplot as plt
#
# define a function
def func(x, y):
    return np.sin(x) ** 2 +  np.cos(y) **2
# generate 50 values b/w 0 a5
x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)
  
# Generate combination of grids
X, Y = np.meshgrid(x, y)
Z = func(X, Y)
  
# Draw rectangular contour plot
plt.contour(X, Y, Z, cmap='gist_rainbow_r');


Python3
# generate r and theta arrays
rad_arr = np.radians(np.linspace(0, 360, 20))
r_arr = np.arange(0, 1, .1)
# define function
def func(r, theta):
  return r * np.sin(theta) 
  
r, theta = np.meshgrid(r_arr, rad_arr)
# get the values of response variables
values = func(r,theta)
  
# plot the polar coordinates
fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
ax.contourf(theta, r, values, cmap='Spectral_r')
  
plt.show()


Python3
# install & import plotly
! pip install plotly
import plotly.figure_factory as ff
  
# Define variables
a = np.array([0. , 0. , 0., 0., 1./3, 1./3, 1./3, 2./3, 2./3, 1.])
b = np.array([0., 1./3, 2./3, 1., 0., 1./3, 2./3, 0., 1./3, 0.])
c = 1 - a - b
# Define function that generates response variable
func = (a - 0.02) * b * (a - 0.5) * (b - 0.4) * (c - 1)**2
  
# plot ternary contour
fig = ff.create_ternary_contour(np.array([a, b, c]), func,
                                pole_labels=['a', 'b', 'c'],
                                interp_mode='cartesian',
                                colorscale='Viridis',)
fig.show()


  • 极坐标图:为了绘制极坐标图,我们需要先定义 r 和 theta。下面是使用 matplotlib 子图绘制极地等高线图的示例代码。

蟒蛇3

# generate r and theta arrays
rad_arr = np.radians(np.linspace(0, 360, 20))
r_arr = np.arange(0, 1, .1)
# define function
def func(r, theta):
  return r * np.sin(theta) 
  
r, theta = np.meshgrid(r_arr, rad_arr)
# get the values of response variables
values = func(r,theta)
  
# plot the polar coordinates
fig, ax = plt.subplots(subplot_kw=dict(projection='polar'))
ax.contourf(theta, r, values, cmap='Spectral_r')
  
plt.show()


极地等高线图

  • 三元轮廓图: Matplotlib 不提供用于绘制三元轮廓图的明确 API,但是,还有许多其他软件包可以做到这一点。在这个例子中,我们将使用 Plotly 库。

蟒蛇3

# install & import plotly
! pip install plotly
import plotly.figure_factory as ff
  
# Define variables
a = np.array([0. , 0. , 0., 0., 1./3, 1./3, 1./3, 2./3, 2./3, 1.])
b = np.array([0., 1./3, 2./3, 1., 0., 1./3, 2./3, 0., 1./3, 0.])
c = 1 - a - b
# Define function that generates response variable
func = (a - 0.02) * b * (a - 0.5) * (b - 0.4) * (c - 1)**2
  
# plot ternary contour
fig = ff.create_ternary_contour(np.array([a, b, c]), func,
                                pole_labels=['a', 'b', 'c'],
                                interp_mode='cartesian',
                                colorscale='Viridis',)
fig.show()


三元等值线图

参考:

  • NIST手册
  • 情节图书馆