数据处理
此部分自行完成,预先准备好需要的数据即可。
本例子实现的是:要在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()
运行结果
文章来源:https://www.toymoban.com/news/detail-511353.html
关于其他三维图像
Python绘制更多三维图形的教程请参考其他博文,如https://blog.csdn.net/u013185349/article/details/122618862文章来源地址https://www.toymoban.com/news/detail-511353.html
到了这里,关于Python三维图像的绘制以及相关图例添加(3D图像 - 图例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!