我想绘制不同视角的3D图,每个图都有一组相同的数据,根据组的不同颜色。但是下面的方法似乎只绘制最后一组数据,而不是保留前面的组。
fig = plt.figure()
# group_id is a group-id map, eg {'A': 0, 'B': 1, ...}
for k, v in group_id.items():
# data_id indicates id of each data
subset_idx = data_id == v # obtain idx of data belonging to group k
d = data[subset_idx] # get the data subset
for i, angle in enumerate([45, 90, 135, 180]):
ax = fig.add_subplot(1, 4, i + 1, projection='3d')
ax.view_init(azim=angle)
ax.scatter(d[:, 0], d[:, 1], d[:, 2], c=colors[v], label=k)
该示例会遇到一个警告:
MatplotlibDeprecationWarning:
Adding an axes using the same arguments as a previous axes currently
reuses the earlier instance. In a future version, a new instance will
always be created and returned. Meanwhile, this warning can be
suppressed, and the future behavior ensured, by passing a unique label
to each axes instance.
"Adding an axes using the same arguments as a previous axes "
这应该不会引起任何严重的问题。然而,结果似乎只绘制了最后一组数据(group_id中的最后一项),这表明ax = fig.add_subplot
可能已经创建了与警告中的描述不匹配的新轴。对我来说更令人困惑的是,2d plot的方法完全相同(尽管它给出了相同的警告)。
1条答案
按热度按时间6ojccjat1#
你可以在for循环之前使用列表解析创建所有4个轴示例,然后使用索引
i
绘制for循环中的每个子图。你的代码不是MCVE,所以我不能运行它来测试,但这应该可以工作。如果不行,在下面发表评论。