在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