3

リンクされたx軸stの上と下の目盛り/ラベルを使用してプロットを作成しようとしています(ジュールとkジュール)。sharex などの例を見てきましたが、私のニーズは次のとおりです。

  1. 2番目の目盛り/ラベルが最初の軸から生成される場所にリンクされた軸を作成する方法
  2. 一方の軸の制限を変更すると、もう一方の軸が自動的に更新されます

最も簡単な方法 (まったくエレガントではありません) は、2 つの x 変数を作成することです。

x1 = np.arange(0,10000,1000)
x2 = x1/1000.
y = np.random.randint(0,10,10)

fig, ax = plt.subplots()
ax.plot(x1, y, 'ro')

ax2 = ax.twiny()
ax2.plot(x2,y,visible=False)
plt.show()


これにより、以下が生成されます。

わかった

しかし、どちらかに x 軸の制限を設定しようとすると、問題が発生します。たとえば、ax2.set_xlim(2,5)上の軸のみを変更します。

いいえ、それは私が望むものではありません

x1 と x2 が関連していることは既にわかっているので、一方を変更すると他方が自動的に処理されるようにするには、プロットをどのように設定すればよいでしょうか。

どうもありがとう

4

1 に答える 1

3

指定スケールの寄生軸を使いたいようです。matlpotlib サイトにこのがあり、わずかに変更されたバージョンが以下にあります。

import matplotlib.transforms as mtransforms
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.parasite_axes import SubplotHost
import numpy as np

# Set seed for random numbers generator to make data recreateable
np.random.seed(1235) 

# Define data to be plotted
x1 = np.arange(0,10000,1000)
x2 = x1/1000.
y1 = np.random.randint(0,10,10)
y2 = y1/5.

# Create figure instance
fig = plt.figure()

# Make AxesHostAxesSubplot instance
ax = SubplotHost(fig, 1, 1, 1)

# Scale for top (parasite) x-axis: makes top x-axis 1/1000 of bottom x-axis
x_scale = 1000.
y_scale = 1.

# Set scales of parasite axes to x_scale and y_scale (relative to ax)
aux_trans = mtransforms.Affine2D().scale(x_scale, y_scale)

# Create parasite axes instance
ax_parasite = ax.twin(aux_trans) 
ax_parasite.set_viewlim_mode('transform')

fig.add_subplot(ax)

# Plot the data
ax.plot(x1, y1)
ax_parasite.plot(x2, y2)

# Configure axis labels and ticklabels
ax.set_xlabel('Original x-axis')
ax_parasite.set_xlabel('Parasite x-axis (scaled)')
ax.set_ylabel('y-axis')
ax_parasite.axis['right'].major_ticklabels.set_visible(False)

plt.show()

これにより、以下の出力が得られます

ここに画像の説明を入力

axインスタンスの制限を変更すると、インスタンスの制限がax_parasite自動的に更新されます。

# Set limits of original axis (parasite axis are scaled automatically)
ax.set_ylim(0,12)
ax.set_xlim(500,4000)

ここに画像の説明を入力

于 2013-06-07T21:18:01.540 に答える