如何确定一个matplotlib轴对象的投影(2D或3D)



在Python的matplotlib库中,很容易在创建时指定轴对象的投影:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
ax = plt.axes(projection='3d')

但是我如何确定现有轴对象的投影?没有ax.get_projection, ax.properties没有"投影"键,谷歌搜索也找不到任何有用的东西。

事实证明,这里给出的答案实际上是这个问题的更好的答案:python检查数字是2d还是3d我在那个副本中给出的答案是这个问题更好的答案。

在任何情况下,都可以使用坐标轴的name。这是决定投影的字符串。

plt.gca().name  ax.name

如果ax为轴。

3D轴的名称为"3d"。2D轴的名称将是"rectilinear", "polar"或其他名称,具体取决于绘图类型。自定义投影将具有自定义名称。

ax.name代替ax.get_projection()

我不认为有一种自动化的方式,但显然有一些属性只有3D投影(例如zlim)。

所以你可以写一个小的辅助函数来测试它是否是3D的:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def axesDimensions(ax):
    if hasattr(ax, 'get_zlim'): 
        return 3
    else:
        return 2

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, projection='3d')
print "ax1: ", axesDimensions(ax1)
print "ax2: ", axesDimensions(ax2)

打印:

ax1:  2
ax2:  3

根据投影,ax将是不同的类。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, projection='3d')
print(type(ax1))  # <class 'matplotlib.axes._subplots.AxesSubplot'>
print(type(ax2))  # <class 'matplotlib.axes._subplots.Axes3DSubplot'>
isinstance(ax1, plt.Axes)  # True
isinstance(ax1, Axes3D)    # False
isinstance(ax2, plt.Axes)  # True - Axes3D is also a plt.Axes
isinstance(ax2, Axes3D)    # True 

相关内容

  • 没有找到相关文章

最新更新