关于三维图像的内容很多博友已经写了
推荐:三维绘图,画三维图,3d图-英文版
上面写的都非常详细,很推荐,特别是英文版那个,基于此,只给我写的一个例子
三维图
画
f ( x , y ) = x 2 + y 2 f(x,y)=x^2+y^2
f
(
x
,
y
)
=
x
2
+
y
2
的三维图
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
from
mpl_toolkits
.
mplot3d
import
Axes3D
x
=
np
.
arange
(
-
10
,
10
,
0.2
)
y
=
np
.
arange
(
-
10
,
10
,
0.2
)
f_x_y
=
np
.
power
(
x
,
2
)
+
np
.
power
(
y
,
2
)
fig
=
plt
.
figure
(
)
ax
=
plt
.
gca
(
projection
=
'3d'
)
ax
.
plot
(
x
,
y
,
f_x_y
)
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
import
mpl_toolkits
.
axisartist
as
axisartist
from
mpl_toolkits
.
mplot3d
import
Axes3D
#画三维图不可少
from
matplotlib
import
cm
#cm 是colormap的简写
# 1_dimension gaussian function
def
gaussian
(
x
,
mu
,
sigma
)
:
f_x
=
1
/
(
sigma
*
np
.
sqrt
(
2
*
np
.
pi
)
)
*
np
.
exp
(
-
np
.
power
(
x
-
mu
,
2
.
)
/
(
2
*
np
.
power
(
sigma
,
2
.
)
)
)
return
(
f_x
)
# 2_dimension gaussian function
def
gaussian_2
(
x
,
y
,
mu_x
,
mu_y
,
sigma_x
,
sigma_y
)
:
f_x_y
=
1
/
(
sigma_x
*
sigma_y
*
(
np
.
sqrt
(
2
*
np
.
pi
)
)
**
2
)
*
np
.
exp
(
-
np
.
power\
(
x
-
mu_x
,
2
.
)
/
(
2
*
np
.
power
(
sigma_x
,
2
.
)
)
-
np
.
power
(
y
-
mu_y
,
2
.
)
/
\
(
2
*
np
.
power
(
sigma_y
,
2
.
)
)
)
return
(
f_x_y
)
#设置2维表格
x_values
=
np
.
linspace
(
-
5
,
5
,
2000
)
y_values
=
np
.
linspace
(
-
5
,
5
,
2000
)
X
,
Y
=
np
.
meshgrid
(
x_values
,
y_values
)
#高斯函数
mu_x
,
mu_y
,
sigma_x
,
sigma_y
=
0
,
0
,
0.8
,
0.8
F_x_y
=
gaussian_2
(
X
,
Y
,
mu_x
,
mu_y
,
sigma_x
,
sigma_y
)
#显示三维图
fig
=
plt
.
figure
(
)
ax
=
plt
.
gca
(
projection
=
'3d'
)
ax
.
plot_surface
(
X
,
Y
,
F_x_y
,
cmap
=
'jet'
)
# 显示等高线图
#ax.contour3D(X,Y,F_x_y,50,cmap='jet')
三维等高线
将上面等高线打开,三维图注释掉
#ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 显示等高线图
ax
.
contour3D
(
X
,
Y
,
F_x_y
,
50
,
cmap
=
'jet'
)
2维等高线
import
numpy
as
np
import
matplotlib
.
pyplot
as
plt
import
mpl_toolkits
.
axisartist
as
axisartist
from
mpl_toolkits
.
mplot3d
import
Axes3D
#画三维图不可少
from
matplotlib
import
cm
#cm 是colormap的简写
#定义坐标轴函数
def
setup_axes
(
fig
,
rect
)
:
ax
=
axisartist
.
Subplot
(
fig
,
rect
)
fig
.
add_axes
(
ax
)
ax
.
set_ylim
(
-
4
,
4
)
#自定义刻度
# ax.set_yticks([-10, 0,9])
ax
.
set_xlim
(
-
4
,
4
)
ax
.
axis
[
:
]
.
set_visible
(
False
)
#第2条线,即y轴,经过x=0的点
ax
.
axis
[
"y"
]
=
ax
.
new_floating_axis
(
1
,
0
)
ax
.
axis
[
"y"
]
.
set_axisline_style
(
"-|>"
,
size
=
1.5
)
# 第一条线,x轴,经过y=0的点
ax
.
axis
[
"x"
]
=
ax
.
new_floating_axis
(
0
,
0
)
ax
.
axis
[
"x"
]
.
set_axisline_style
(
"-|>"
,
size
=
1.5
)
return
(
ax
)
# 1_dimension gaussian function
def
gaussian
(
x
,
mu
,
sigma
)
:
f_x
=
1
/
(
sigma
*
np
.
sqrt
(
2
*
np
.
pi
)
)
*
np
.
exp
(
-
np
.
power
(
x
-
mu
,
2
.
)
/
(
2
*
np
.
power
(
sigma
,
2
.
)
)
)
return
(
f_x
)
# 2_dimension gaussian function
def
gaussian_2
(
x
,
y
,
mu_x
,
mu_y
,
sigma_x
,
sigma_y
)
:
f_x_y
=
1
/
(
sigma_x
*
sigma_y
*
(
np
.
sqrt
(
2
*
np
.
pi
)
)
**
2
)
*
np
.
exp
(
-
np
.
power\
(
x
-
mu_x
,
2
.
)
/
(
2
*
np
.
power
(
sigma_x
,
2
.
)
)
-
np
.
power
(
y
-
mu_y
,
2
.
)
/
\
(
2
*
np
.
power
(
sigma_y
,
2
.
)
)
)
return
(
f_x_y
)
#设置画布
fig
=
plt
.
figure
(
figsize
=
(
8
,
8
)
)
#建议可以直接plt.figure()不定义大小
ax1
=
setup_axes
(
fig
,
111
)
ax1
.
axis
[
"x"
]
.
set_axis_direction
(
"bottom"
)
ax1
.
axis
[
'y'
]
.
set_axis_direction
(
'right'
)
#在已经定义好的画布上加入高斯函数
x_values
=
np
.
linspace
(
-
5
,
5
,
2000
)
y_values
=
np
.
linspace
(
-
5
,
5
,
2000
)
X
,
Y
=
np
.
meshgrid
(
x_values
,
y_values
)
mu_x
,
mu_y
,
sigma_x
,
sigma_y
=
0
,
0
,
0.8
,
0.8
F_x_y
=
gaussian_2
(
X
,
Y
,
mu_x
,
mu_y
,
sigma_x
,
sigma_y
)
#显示三维图
#fig = plt.figure()
#ax = plt.gca(projection='3d')
#ax.plot_surface(X,Y,F_x_y,cmap='jet')
# 显示3d等高线图
#ax.contour3D(X,Y,F_x_y,50,cmap='jet')
# 显示2d等高线图,画8条线
plt
.
contour
(
X
,
Y
,
F_x_y
,
8
)