python - 了解 matplotlib 中 subplot 和 add_subplot(散点)图之间的区别

标签 python matplotlib

我试图理解为什么下面的图看起来如此不同

plt.subplot(projection='3d')
plt.scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
plt.scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
plt.show()

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
ax.scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
plt.show()

基本上,如果我只想要一个情节,我不明白为什么我需要添加一个次要情节。所以凭直觉我会使用第一个情节,但他们没有给出相同的结果? enter image description here enter image description here

最佳答案

区别不在于plt.subplotfig.add_subplot
而是在第一种情况下使用 pyplot 的散点函数 plt.scatter,在第二种情况下使用轴的 scatterax.scatter.

plt.scatter 是一个二维函数。它将其第三个参数解释为散点的大小并绘制二维散点图。 (您会看到 z 轴根本没有缩放。)

当使用 ax.scatter 时,ax 是一个 3D 轴 (matplotlib.axes._subplots.Axes3DSubplot)。它的 scatter 方法与 2D 情况不同,因为它需要 3 个参数 x,y,z 作为输入。

现在您可以同时使用 plt.subplotfig.add_subplot 进行 3D 绘图,但您不能使用 plt.scatter在他们中的任何一个。 相反,您需要在这两种情况下使用 ax.scatter,确保调用 matplotlib.axes._subplots.Axes3DSubplotscatter 方法.

  • 一种选择是使用 plt.gca() 获取当前轴(即 3D 轴):

    plt.subplot(projection='3d')
    plt.gca().scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
    plt.gca().scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
    plt.show()
    
  • 您还可以通过调用 `plt.subplot() 获取坐标轴

    ax = plt.subplot(projection='3d')
    ax.scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
    ax.scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
    plt.show()
    
  • 当然,您可以使用您已经找到的工作方式,

    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    ax.scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
    ax.scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
    plt.show()
    
  • 或者您可以使用 plt.subplots(注意 s)同时获取图形和坐标轴句柄,

    fig, ax = plt.subplots(subplot_kw=dict(projection="3d"))
    ax.scatter(position1[:,0], position1[:,1], position1[:,2], marker='.')
    ax.scatter(position2[:,0], position2[:,1], position2[:,2], marker='.')
    plt.show()
    

在所有情况下结果都是一样的。

关于python - 了解 matplotlib 中 subplot 和 add_subplot(散点)图之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673480/

相关文章:

python - Matplotlib - 显示 .plot 和 .bar 的图例

python - 子图的子图 Matplotlib/Seaborn

python - Anaconda ImportError : libSM. so.6: 无法打开共享对象文件: 没有那个文件或目录

python - matplotlib 中的子图创建循环

Python 检测并正确处理多处理管理器关闭

python - Fabric 能否知道期望主机断开连接?

python - 使用 Scipy minimize 进行 Keras BFGS 训练

python - 使用 matplotlib-basemap 将一个多边形添加到绘图中

python - 在 Celery 中,如何运行一个任务,然后让该任务运行另一个任务,并继续运行?

python - (Python) while 循环打破了我的 random_number