【发布时间】:2022-01-02 04:53:56
【问题描述】:
我正在尝试使用正交投影在 2D 中绘制 3D 数据。以下是我正在寻找的部分内容:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig = plt.figure(figsize=(10,10),facecolor='white')
axs = [fig.add_subplot(223)]
axs.append(fig.add_subplot(224))#,sharey=axs[0]))
axs.append(fig.add_subplot(221))#,sharex=axs[0]))
rng = np.random.default_rng(12345)
values = rng.random((100,3))-.5
values[:,1] = 1.6*values[:,1]
values[:,2] = .5*values[:,2]
for ax,axis in zip(axs,['y','x','z']):
axis1,axis2={'x':(1,2),'y':(0,2),'z':(0,1)}[axis]
ax.add_patch(plt.Circle([0,0], radius=.2, color='pink',zorder=-20))
ax.scatter(values[:,axis1],values[:,axis2])
axs[0].set_xlabel('x')
axs[2].set_ylabel('y')
axs[1].set_xlabel('y')
axs[0].set_ylabel('z')
fig.subplots_adjust(.08,.06,.99,.99,0,0)
plt.show()
这个情节和我尝试的修复存在一些问题:我需要“相等”的方面,以便圆圈实际上是圆形的。我还需要每个子图中的圆圈大小相同。最后,我希望空间得到优化(即,子图内部和子图之间的空白尽可能少)。
我尝试在子图之间共享轴,然后为每个轴执行 .axis('scaled') 或 .set_aspect('equal','box',share=True),但轴最终没有正确共享,并且每个子图中的圆圈最终大小不同。虽然它将子图裁剪为数据,但它在子图之间留下了很多空间。 .axis('equal') 或 .set_aspect('equal','datalim',share=True) 不共享轴会在子图中留下空白,使用共享轴会遗漏一些数据。
有什么办法让它工作吗?如果它可以在 matplotlib 3.4.3 上运行就完美了。
【问题讨论】:
标签: python matplotlib 2d projection orthographic