(これは素朴な質問かもしれません。もしそうならご容赦ください。)
Python 3.7.1とMatplotLib 3.0.1を使用しています。
以下の単純なコードでは、さまざまな方法を使用して軸にラベルを割り当てました。それらはOOの観点から等価であるように見えます。ただし、_x axis
_ラベルのみが表示されます。どうして?
_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
_のみが表示されています。
here によると、matplotlib.axis.XAxis.set_label()
アプローチが機能するようです。
私の場合、_ax.xaxis
_は_mpl_toolkits.mplot3d.axis3d.XAxis
_型です。少し違うタイプです。しかし、私はそれがはずだと思いますもうまくいくと思います。
Matplotlibには「ラベル」と呼ばれるものがいくつかあります。たとえば、軸ラベル、_set_xlabel
_で設定、ティックラベル、_set_ticklabels
_で設定、アーティストラベル、_set_label
_で設定.
Matplotlibのすべてのアーティストにはlabel属性があります。凡例に表示されるようにラベルを設定するときに、通常これに遭遇します。
_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.set_ylabel(..)
をax.yaxis.set_label_text(..)
で置き換えることができます(追加の引数labelpad
を除く) _set_ylabel
_ではなく、_set_label_text
_が受け取ります。
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')
望ましい出力を与えます: