科研论文配图绘制指南-Task01( 三 )


构造色彩立方体的代码:
r, g, b = np.indices((17, 17, 17)) / 16.0rc = midpoints(r)gc = midpoints(g)bc = midpoints(b)sphere = rc > -1# combine the color componentscolors = np.zeros(sphere.shape + (3,))colors[..., 0] = rccolors[..., 1] = gccolors[..., 2] = bc
这行代码使用了 numpy 的 () 函数,用于生成一个表示网格坐标的数组 。np.((17, 17, 17)) 生成了一个三维数组,表示的网格,其中每个元素是对应的坐标值 。将这个数组除以 16.0 的目的是将坐标值缩放到 [0, 1) 的范围内,以便后续处理 。生成三个三维数组 r、g 和 b之后,通过函数 () 计算这些数组中相邻元素的中点,生成对应的 rc、gc 和 bc 数组 。
分别计算了 r、g 和 b 数组中相邻元素的中点之后,并将结果赋值给新的数组 rc、gc 和 bc 。这样,rc、gc 和 bc 分别包含了 r、g 和 b 数组中每个维度上相邻元素的中点 。
总之,这段代码的作用是生成表示网格坐标的三维数组,并计算这些数组中相邻元素的中点,以用于后续绘图操作 。这通常用于在可视化中创建颜色分布、图案或效果 。
生成一个掩码数组和一个颜色数组 ,并将之前计算得到的 rc、gc 和 bc 数组中的值合并到数组中 。
代码创建了一个名为的布尔型数组 。它使用了之前计算得到的 rc 数组,对每个元素执行比较操作 rc > -1 。这将生成一个布尔型数组,其中的每个元素都是 rc 中对应位置的元素是否大于 -1 的布尔值 。由于这里 rc 的值总是大于等于 0 的,所以 rc > -1 的结果将始终为 True,因此数组的所有元素都是 True,表示一个球体的区域 。
代码首先创建了一个维度与数组相同,但多了一个维度为 3 的数组 。数组的第一个维度表示球体的形状,第二个维度(3)表示 RGB 颜色分量 。然后,通过逐个分量(0、1、2)将 rc、gc 和 bc 数组中的值赋值给数组 。这样, 数组就包含了每个像素点的 RGB 颜色分量 。
总之,这段代码的作用是根据布尔型数组创建一个球体的掩码,并将之前计算得到的颜色分量数组 rc、gc 和 bc 合并到一个名为的数组中 。这将用于后续的图像绘制操作,用颜色来填充球体的区域 。
绘制图像:
fig = plt.figure(figsize=(5,4),dpi=100,facecolor="w")ax = fig.add_subplot(projection='3d')ax.voxels(r, g, b, sphere,facecolors=colors,# edgecolors=np.clip(colors-1, 0, 0),# blackedgecolors = "none",linewidth=0.3,shade=False)ax.xaxis.pane.set_color("none")ax.yaxis.pane.set_color("none")ax.zaxis.pane.set_color("none")ax.xaxis._axinfo["grid"].update({"linewidth":.3, "color" : "none"})ax.yaxis._axinfo["grid"].update({"linewidth":.3, "color" : "none"})ax.zaxis._axinfo["grid"].update({"linewidth":.3, "color" : "none"})
这段代码使用了库来创建一个 3D 图表,绘制了一个球体,并设置了一些样式来美化图表 。
这行代码创建了一个名为 fig 的图表对象 。通过 plt.() 函数,可以指定图表的大小、分辨率和背景颜色 。在这里,图表的大小为 (5, 4),分辨率为 100,背景颜色为白色("w") 。
代码创建了一个 3D 坐标轴对象 ax,它被添加到图表中 。fig.() 函数允许你添加子图,通过 ='3d' 参数,可以指定坐标轴的投影类型为 3D 。
ax.voxels(r, g, b, sphere,facecolors=colors,edgecolors="none",linewidth=0.3,shade=False)
ax.() 函数绘制了一个球体 。() 函数用于绘制 3D 网格体素图 。它接受多个参数,其中:
这段代码的作用是绘制一个由体素构成的球体,并为每个体素填充对应的颜色,实现球体的着色效果 。
ax.xaxis.pane.set_color("none")ax.yaxis.pane.set_color("none")ax.zaxis.pane.set_color("none")ax.xaxis._axinfo["grid"].update({"linewidth": 0.3, "color": "none"})ax.yaxis._axinfo["grid"].update({"linewidth": 0.3, "color": "none"})ax.zaxis._axinfo["grid"].update({"linewidth": 0.3, "color": "none"})