Python三维图像的绘制以及相关图例添加(3D图像

您所在的位置:网站首页 三维饼图怎么设置图例名称 Python三维图像的绘制以及相关图例添加(3D图像

Python三维图像的绘制以及相关图例添加(3D图像

2024-07-10 07:28| 来源: 网络整理| 查看: 265

数据处理

此部分自行完成,预先准备好需要的数据即可。

本例子实现的是:要在4*4的格子里面的3个格子里分别绘制3条不同颜色的图形。 (为了更加直观,绘图相关的程序不使用循环)

// example h1 = [0.4, 0.3, 0.5] h2 = [0.9, 0.3, 0.1] h3 = [0.2, 0.4, 0.8] 三维柱体绘制

(为了更加直观,绘图相关的程序不使用循环)

fig = plt.figure(figsize=(9, 6)) ax = fig.add_subplot(111, projection='3d') x = np.arange(1, 4, 1) y = np.arange(1, 4, 1) # Construct arrays with the dimensions for the 16 bars. dx = dy = 0.3 # 设置柱长、宽 ax.bar3d(3, 3, 0, dx, dy, h1[0], 'b') ax.bar3d(0, 1, 0, dx, dy, h1[1], 'b') ax.bar3d(3, 0, 0, dx, dy, h1[2], 'b') ax.bar3d(3.6, 3, 0, dx, dy, h2[0], 'r') ax.bar3d(0.6, 1, 0, dx, dy, h2[1], 'r') ax.bar3d(3.6, 0, 0, dx, dy, h2[2], 'r') ax.bar3d(3.6, 3.6, 0, dx, dy, h3[0], 'y') ax.bar3d(0.6, 1.6, 0, dx, dy, h3[1], 'y') ax.bar3d(3.6, 0.6, 0, dx, dy, h3[2], 'y')

可以看到3维柱形是通过ax.bar3d()函数设置的, 其中传入的参数分别是x,y,z轴的开始坐标,dx, dy, h[i]设置柱体的长、宽、高。 如果要绘制多个柱体,可以直接循环实现。

3D图像图例的添加 y_unique = np.unique(y-1) # 可以看作图例类型个数 color = ['r', 'b', 'y', 'k'] # 颜色集 methods = ('Dynamic', 'Random', 'Nearby', 'other') # 图例说明集 legend_lines = [mpl.lines.Line2D([0], [0], linestyle="none", marker='o', c=color[y]) for y in y_unique] legend_labels = [methods[y] for y in y_unique] ax.legend(legend_lines, legend_labels, numpoints=1, title='Method')

3D 图例的添加和2D的相似,主要通过ax.legend()函数实现。当然3d图像的图例要复杂一点,毕竟不是一个平面的图形。

总程序代码 import pickle import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl def balance_comparison(): # 系统均衡比较函数1 h1 = [0.4, 0.3, 0.5] h2 = [0.9, 0.3, 0.1] h3 = [0.2, 0.4, 0.8] fig = plt.figure(figsize=(9, 6)) # 设置图片的大小 ax = fig.add_subplot(111, projection='3d') x = np.arange(1, 4, 1) y = np.arange(1, 4, 1) # Construct arrays with the dimensions for the 16 bars. dx = dy = 0.3 # 设置柱长、宽 ax.bar3d(3, 3, 0, dx, dy, h1[0], 'b') ax.bar3d(0, 1, 0, dx, dy, h1[1], 'b') ax.bar3d(3, 0, 0, dx, dy, h1[2], 'b') ax.bar3d(3.6, 3, 0, dx, dy, h2[0], 'r') ax.bar3d(0.6, 1, 0, dx, dy, h2[1], 'r') ax.bar3d(3.6, 0, 0, dx, dy, h2[2], 'r') ax.bar3d(3.6, 3.6, 0, dx, dy, h3[0], 'y') ax.bar3d(0.6, 1.6, 0, dx, dy, h3[1], 'y') ax.bar3d(3.6, 0.6, 0, dx, dy, h3[2], 'y') # 设置坐标轴的刻度 ax.set_xticks(x) ax.set_xlabel('X') ax.set_yticks(y) ax.set_ylabel('Y') ax.set_zlabel('queuePro') ax.view_init(elev=20, azim=-60) # 将三维的灰色背诵面换成白色 ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0)) y_unique = np.unique(y-1) color = ['r', 'b', 'y', 'k'] methods = ('Dynamic', 'Random', 'Nearby', 'other') legend_lines = [mpl.lines.Line2D([0], [0], linestyle="none", marker='o', c=color[y]) for y in y_unique] legend_labels = [methods[y] for y in y_unique] ax.legend(legend_lines, legend_labels, numpoints=1, title='Method') plt.savefig("./figures/BalanceCom.png") plt.show() def main(): balance_comparison() if __name__ == '__main__': main() 运行结果

在这里插入图片描述

关于其他三维图像

Python绘制更多三维图形的教程请参考其他博文,如https://blog.csdn.net/u013185349/article/details/122618862



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3