编程语言
首页 > 编程语言> > Python matplotlib 绘制三维图并修改样式

Python matplotlib 绘制三维图并修改样式

作者:互联网

问题描述

通过Python matplotlib绘制三维函数图,函数内容如下:
在这里插入图片描述
为了简化表达,对测试函数的维度做降维表达,从100维降到2维,这样就可以通过三维函数来表达了。样式上需要满足以下要求:

编码

Ackley

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号


X_BOUND = [-5, 5]
Y_BOUND = [-5, 5]

def F(x, y):

    return -20 * np.exp(-0.2 * np.sqrt(0.5 * (x**2 + y**2))) - (np.exp(0.5 * (np.cos(2 * np.pi * x) + np.cos(2 * np.pi * y)))) + np.e + 20

#绘制3D图形
#def plot_3d(ax):\
ax = plt.axes(projection='3d')
X = np.linspace(*X_BOUND, 100)#等差数列
Y = np.linspace(*Y_BOUND, 100)
X, Y = np.meshgrid(X, Y)#坐标矩阵,每个交叉点对应网格
Z = F(X, Y)
    # 绘制3D图形,X,Y,Z:2D数组形式的数据值
    #rstride:数组行距(步长大小)
    #cstride:数组列距(步长大小)
    #cmap:曲面块颜色映射
    #color:曲面块颜色
font2 = {'family': 'Times New Roman',
             'weight': 'normal',
             'size': 14,
             }
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
ax.set_zlim(-5, 20)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z',font2)
ax.set_title('Ackley',font2)

#plt.yticks(fontproperties='Times New Roman', size=14)
#plt.xticks(fontproperties='Times New Roman', size=14)
    # 设置横纵坐标的名称以及对应字体格式
    #
plt.xlabel('x1', font2)
plt.ylabel('x2', font2)

ax.contourf(X, Y, Z, zdir='z',offset=-5)
plt.savefig('./Ackley.jpg',dpi=150)
plt.show()

if __name__ == "__main__":
    #绘制函数三维图像
    fig = plt.figure()
    ax = Axes3D(fig)
    #plot_3d(ax)

Griewank

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号

X_BOUND = [-5, 5]
Y_BOUND = [-5, 5]

def F(x, y):
    return 2 * 10 + x ** 2 - 10 * np.cos(2 * np.pi * x) + y ** 2 - 10 * np.cos(2 * np.pi * y)

#绘制3D图形
#def plot_3d(ax):
ax = plt.axes(projection='3d')
X = np.linspace(*X_BOUND, 100)#等差数列
Y = np.linspace(*Y_BOUND, 100)
X, Y = np.meshgrid(X, Y)#坐标矩阵,每个交叉点对应网格
Z = F(X, Y)
    # 绘制3D图形,X,Y,Z:2D数组形式的数据值
    #rstride:数组行距(步长大小)
    #cstride:数组列距(步长大小)
    #cmap:曲面块颜色映射
    #color:曲面块颜色
font2 = {'family': 'Times New Roman',
             'weight': 'normal',
             'size': 14,
            }
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
ax.set_zlim(0, 90)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z',font2)
ax.set_title('Griewank',font2)
#plt.yticks(fontproperties='Times New Roman', size=14)
#plt.xticks(fontproperties='Times New Roman', size=14)

    # 设置横纵坐标的名称以及对应字体格式

plt.xlabel('x1', font2)
plt.ylabel('x2', font2)

ax.contourf(X, Y, Z, zdir='z',offset=-5)
plt.savefig('./Griewank.jpg',dpi=150)
plt.show()



if __name__ == "__main__":
    #绘制函数三维图像
    fig = plt.figure()
    ax = Axes3D(fig)
    #plot_3d(ax)

Schwefe

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

X_BOUND = [-500, 500]
Y_BOUND = [-500, 500]


def F(x, y):
    return 418.9829*2 -(x*np.sin(np.sqrt(np.abs(x)))+y*np.sin(np.sqrt(np.abs(y))))
# 绘制3D图形
#def plot_3d(ax):
ax = plt.axes(projection='3d')
X = np.linspace(*X_BOUND, 100)  # 等差数列
Y = np.linspace(*Y_BOUND, 100)
X, Y = np.meshgrid(X, Y)  # 坐标矩阵,每个交叉点对应网格
Z = F(X, Y)
    # 绘制3D图形,X,Y,Z:2D数组形式的数据值
    # rstride:数组行距(步长大小)
    # cstride:数组列距(步长大小)
    # cmap:曲面块颜色映射
    # color:曲面块颜色
font2 = {'family': 'Times New Roman',
             'weight': 'normal',
             'size': 14,
        }
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
ax.set_zlim(0, 1800)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z', font2)
ax.set_title('Schwefel',font2)
#plt.yticks(fontproperties='Times New Roman', size=14)
#plt.xticks(fontproperties='Times New Roman', size=14)

    # 设置横纵坐标的名称以及对应字体格式

plt.xlabel('x1', font2)
plt.ylabel('x2', font2)

ax.contourf(X, Y, Z, zdir='z', offset=-5)
plt.savefig('./Schwefel.jpg',dpi=150)
plt.show()


if __name__ == "__main__":
    # 绘制函数三维图像
    fig = plt.figure()
    ax = Axes3D(fig)
    #plot_3d(ax)

绘图结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:__,plt,Python,font2,matplotlib,三维图,set,np,ax
来源: https://blog.csdn.net/zhouxinxin111/article/details/113791612