gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:54:15 30 4
gpt4 key购买 nike

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

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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com