2013-11-27 18 views
6

目盛りが整列するように2つの独立したy軸を持つプロットを作ることは可能ですか?matplotlib twinx目盛りを整列する

以下は、ソリューションの半分の例です。私はtwinxを使ってy軸を2倍にしましたが、目盛りは整列せず、グリッド線はプロット上で厄介なパターンを形成します。ティックマークを同じ位置に共有する方法はありますか?異なるy値に対応していますか?下の例では、左の5の目盛りが、右の6の目盛りと同じ垂直位置にあるようにしたいと思います。

import numpy as np 

a = np.random.normal(10, 3, size=20) 
b = np.random.normal(20, 5, size=40) 

fig, ax1 = plt.subplots() 
ax2 = ax1.twinx() 
ax1.hist(a) 
ax2.hist(b) 

histograms

この運動の包括的な点は、グリッド線は、2つの軸のオーバーラップすることです。

答えて

9

yticksを手動で設定する必要があります。これは自動的に計算され、結果が変化します。我々は軸の境界との間の5点のアレイを使用してytick位置を設定

ax1.set_yticks(np.linspace(ax1.get_ybound()[0], ax1.get_ybound()[1], 5)) 
ax2.set_yticks(np.linspace(ax2.get_ybound()[0], ax2.get_ybound()[1], 5)) 

:このような何かを追加します。あなたは、ヒストグラムを持っているので、あなただけのそれぞれの場合にゼロに低い値を設定することができ、あなたは、上側が若干大きくバインドしたいことがあり、私は代わりの変化に(プロットを与える

ax1.set_yticks(np.linspace(0, ax1.get_ybound()[1]+1, 5)) 
ax2.set_yticks(np.linspace(0, ax2.get_ybound()[1]+1, 5)) 

だろう明確にするために、色と透明度(アルファ)): `AX1:

enter image description here

+0

境界は常に2つの数値(未定義しない限り)で定義されているので、次はまた、軸の既に定義された境界との間の5点を作成します。 set_yticks(np.linspace(* ax1.get_ybound()、5) '。 –

関連する問題