2

同じ x 軸を使用して、単一の列に任意の数のプロットを作成したいと思います。

次に例を示します。

import numpy as np
from matplotlib import pyplot as plt

N=1000
x = np.linspace(-.5,1.5,num=N)
xshift = x-0.5
Bz = 30*np.exp(-xshift**8/0.00125)*np.sin(xshift*2.*np.pi)
Np = 30*np.exp(-xshift**10/0.00125)+5
Vx = 200*np.exp(-xshift**10/0.00125)+400

fig = plt.figure()

#list of tuples of the form `(data, label)`    
data_list = [(Bz,"B_z"),(Vx,"V_x"),(Np,"N_p")]

for i,(data,lab) in enumerate(data_list,1):
    ax = fig.add_subplot(len(data_list),1,i)
    ax.set_ylabel("$\mathrm{%s}$"%lab)
    ax.get_xaxis().set_ticklabels([])
    ax.plot(x,data)
else:
    #Reset default tick labels here on ax
    pass

plt.show()

このプロットでは、最後のプロットで xtic ラベルを表示するのが論理的ですが、他のすべてのプロットではその情報が省略されています。最後の項目を から取り出して、明示的に綴ることもできますが、それはハックに思えますdata_listデフォルト設定を復元する必要があることをmatplotlib Axesに伝えるエレガントな方法はありxticlabelますか?

(いくつかのドキュメント

4

1 に答える 1

1

これはあなたが望むことをしていると思いますが、あなたが恐れているのと同じくらい「ハッキー」かもしれないと思います。また、それはおそらく正しい方法だと思います。:)

import numpy as np
from matplotlib import pyplot as plt

N=1000
x = np.linspace(-.5,1.5,num=N)
xshift = x-0.5
Bz = 30*np.exp(-xshift**8/0.00125)*np.sin(xshift*2.*np.pi)
Np = 30*np.exp(-xshift**10/0.00125)+5
Vx = 200*np.exp(-xshift**10/0.00125)+400

fig = plt.figure()

#list of tuples of the form `(data, label)`    
data_list = [(Bz,"B_z"),(Vx,"V_x"),(Np,"N_p")]

left = .15
height = .2
width = .7
bottom = .0
axes_ticks = []
axes = []
for i,(data,lab) in enumerate(data_list,1):
    ax = fig.add_subplot(len(data_list),1,i)
    bottom += height
    ax.set_position((left, bottom, width, height))

    ax.set_ylabel("$\mathrm{%s}$"%lab)
    axes_ticks.append(ax.get_xaxis().get_ticklocs())
    ax.get_xaxis().set_ticks([])
    ax.plot(x,data)
    axes.append(ax)
else:
    #Reset default tick labels here on ax
    axes[0].get_xaxis().set_ticks(axes_ticks[0])


plt.show()
于 2012-11-08T16:24:02.890 に答える