2

ここでの私の質問に続いて: Y 軸に整数のみを使用するように強制し、そこから得た大きな支援により、素敵なグラフを描画する際に別の問題が発生しました。

私は pyplot モジュールを使用して、グラフの上部にいくつかの参照点を持つ 2 番目の軸を描画していますが、下と上の x 軸を取得して、同じ場所であるとされる場所を一致させることができないようです...

グラフメーカーからの現在の出力...

グラフを見ると、1 Kb のマーカー (点線) と 2 番目の軸のティッカー ラベルが一致していないことがわかります。1Mbも同じですが、1Gbが並んでいるようです。

2番目の軸は、ここで開始されたオーバーレイされたサブプロット(私が理解しているように)から来ています:

fig = plt.figure()
ax1 = fig.add_subplot(111)

両方の軸に同じ制約を使用しています。

 ax1.set_xscale("log", basex=2)
 ax1.set_xlim(0,34359738368)  

と:

ax2 = ax1.twiny()
ax2.set_xlim(0,34359738368)
ax2.set_xscale("log", basex=2)

および 2 つのマーク セットの同じ値:

ax1.axvline(x=1024, color='black', linestyle='--')
ax1.axvline(x=1048576, color='black', linestyle='--')
ax1.axvline(x=1073741824, color='black', linestyle='--')

と:

ax2.set_xticks([1024, 1048576, 1073741824])
ax2.set_xticklabels(['1 Kbyte','1 Mbyte','1 Gbyte'], fontsize=8)

彼らが並んでいない理由はありますか?途中で何か馬鹿なことをしたと確信している..

4

1 に答える 1

1

あなたが投稿したスニペットを正確に実行すると、あなたが見る不一致を示すグラフが表示されますが、x 制限が何であるかについても同意しません。

In [68]: ax1.get_xlim()
Out[68]: (9.9999999999999995e-08, 34359738368.0)

In [69]: ax2.get_xlim()
Out[69]: (0.0, 34359738368.0)

これは (どうやら)異なる軸に対して異なる順序でset_xscale()andを呼び出し、 を与えるためです。境界として軸を設定すると、明らかにそこから回復しようとしますが、その逆はありません。set_xlim()log(0)-inf0log

0使用したが同じ順序を使用した場合:

In [103]: ax1.get_xlim()
Out[103]: (0.0, 34359738368.0)

In [104]: ax2.get_xlim()
Out[104]: (0.0, 34359738368.0)

または、代わりに下限を使用すると、次の1ようになります。

In [88]: ax1.get_xlim()
Out[88]: (1.0, 34359738368.0)

In [89]: ax2.get_xlim()
Out[89]: (1.0, 34359738368.0)

私自身は、2 番目のアプローチを使用します。より明示的で、順序依存性を導入しません。

于 2012-08-22T12:25:57.670 に答える