MatplotLib 3.0.1中ax.set_xlabel()和ax.xaxis.set_label()的区别

8

(这可能是一个天真的问题。如果是的话,请原谅我。)

我正在使用Python 3.7.1和MatplotLib 3.0.1。

在下面的简单代码中,我使用了不同的方法来为轴分配标签。从OO的角度看,它们似乎是等效的。但是只有x轴标签显示出来。为什么?

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

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.linspace(-2,2,60)
y = np.linspace(-2,2,60)

xx, yy = np.meshgrid(x,y)

z = xx**2 + yy**3

surf = ax.plot_surface(xx, yy, z, cmap="viridis")

ax.set_xlabel('x axis')      # <====== This works
ax.yaxis.set_label('y axis') # <====== This doesn't work
ax.zaxis.set_label('z axis') # <====== This doesn't work

在下面的图像中,您只能看到标签 x axis

enter image description here

添加1

根据这里,似乎matplotlib.axis.XAxis.set_label()方法是可行的。

在我的情况下,ax.xaxismpl_toolkits.mplot3d.axis3d.XAxis类型。它是一个有点不同的类型。但我认为它也应该可以工作。

2个回答

5
看到您提供的matplotlib.axis.XAxis.set_label()文档,似乎是将标签分配给轴本身,以便在图例中使用(有关更多解释,请参见@ImportanceOfBeingErnest的答案)。
无论如何,相当于ax.set_xlabel的是matplotlib.axis.Axis.set_label_text 因此,将代码更改为:
ax.set_xlabel('x axis')     
ax.yaxis.set_label_text('y axis')
ax.zaxis.set_label_text('z axis')

给出所需的输出结果:

在此输入图片描述


5

在matplotlib中有几种称为“标签”的东西。例如,通过set_xlabel设置轴标签,通过set_ticklabels设置刻度标签,通过set_label设置图形标签。

在matplotlib中的每个图形都有一个标签属性。通常在为图形设置标签以在图例中显示时会遇到它。

plt.plot(..., label="my label")

但它也可能对其他情况有所帮助。上述内容相当于

line, = plt.plot(...)
line.set_label("mylabel")

因此,不仅由plot创建的Line2D对象具有标签,同样matplotlib.axis.XAxis也具有标签。这是您使用ax.yaxis.set_label设置的标签。但是,在生成图例时,默认情况下不会考虑此标签,因此其对最终用户的有用性值得怀疑。
对于轴的标签,set_ylabel确实是设置ylabel的方法。在内部,这将调用yaxis.set_label_text,因此如@DavidG所指出的那样,您可以通过ax.yaxis.set_label_text(..)替换ax.set_ylabel(..)(除了set_ylabel接受但set_label_text不接受的一个额外参数labelpad)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接