【问题标题】:Python : How to plot 3d graphs using Python?Python:如何使用 Python 绘制 3d 图形?
【发布时间】:2011-01-18 16:06:47
【问题描述】:

我正在使用 matplotlib 来执行此操作

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

fig = plt.figure()
ax = Axes3D(fig)

x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]

ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')

plt.show()

现在这会构建一个在 3d 空间中水平的图形。如何使图表垂直以使其面向用户?

我想要做的是构建多个这样的垂直图,它们相隔一定距离并面向用户。

【问题讨论】:

  • 你想想,用3D图来绘制2D数据是不是有点傻?
  • 我正在改变一个特定的参数 alpha(不是 x 和 y),并观察图表中各种 alpha 值的变化

标签: python matplotlib


【解决方案1】:

bp 的答案可能很好用,但有一个更简单的方法。

您当前的图表在 z 轴上是“平的”,这就是为什么它是水平的。您希望它是垂直的,这意味着您希望它在 y 轴上是“平的”。这涉及对您的代码进行最细微的修改:

from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

fig = plt.figure()
ax = Axes3D(fig)

x = [6,3,6,9,12,24]
y = [3,5,78,12,23,56]
# put 0s on the y-axis, and put the y axis on the z-axis
ax.plot(xs=x, ys=[0]*len(x), zs=y, zdir='z', label='ys=0, zdir=z')
plt.show()

然后,您可以通过为 ys 参数使用不同的值来轻松获得多个此类图表(例如,ys=[2]*len(x) 会将图表稍微放在后面)。

【讨论】:

    【解决方案2】:

    Mayavi,尤其是 mlab 模块,提供了强大的 3D 绘图功能,可以处理大型或复杂数据,并且应该易于在 numpy 数组上使用。

    【讨论】:

      【解决方案3】:

      您可以使用 view_init() 函数设置 3d 绘图的视角。以下示例适用于 matplotlib 1.1 版。

      from mpl_toolkits.mplot3d import axes3d
      import numpy as np
      import matplotlib
      import matplotlib.pyplot as plt
      
      fig = plt.figure()
      ax = fig.add_subplot(111, projection='3d')
      
      x = [6,3,6,9,12,24]
      y = [3,5,78,12,23,56]
      
      ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
      ax.view_init(90, -90)
      plt.show()
      

      【讨论】:

        【解决方案4】:

        根据您要使用ax.plot_surface(x,y,z) 方法的文档。更多信息和图表类型here

        以下应该有效:

        x = [1,2,3]
        y = [4,5,6]
        z = [7,8,9]
        data = zip(x,y,z)
        
        #map data on the plane
        X, Y = numpy.meshgrid(arange(0, max(x), 1), arange(0, max(y), 1))
        Z = numpy.zeros((len(Y), len(X)), 'Float32')
        for x_,y_,z_ in data:
          Z[x_, y_] = z_ #this should work, but only because x and y are integers
                         #and arange was done with a step of 1, starting from 0
        fig = p.figure()
        ax = p3.Axes3D(fig)
        ax.plot_surface(X, Y, Z)
        

        【讨论】:

          猜你喜欢
          • 2019-11-30
          • 2015-10-03
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多