2016-09-21 31 views
1

科学的表記法を使用している場合、軸上の指数の位置を変更する方法を探しています。私はすでにこの問題に数回立ち往生しています。既定のフォーマッタはScalarFormatterですが、何とか指数にアクセスするオプションはありません。matplotlibで科学的表記法を使用している場合の目盛りラベルの指数の位置付け

workaroundがありますが、それは既存のティンバーブも操作するので、好きではありません。これまでのところ、軸のメソッドによって返されたリストには、科学記法が使用されている場合、1つのテキストオブジェクトが含まれていることが分かりました。たとえば:

import matplotlib.pyplot as plt 
import numpy as np 

fig= plt.figure(figsize = plt.figaspect(0.5)) 
ax1= fig.add_subplot(121) 
ax1.plot(np.arange(146), np.random.rand(146)) 
print(ax1.get_xmajorticklabels()) 

ax2= fig.add_subplot(122) 
ax2.plot(np.arange(146)*1e-6, np.random.rand(146)) 
print(ax2.get_xmajorticklabels()) 

Image with the resulting plots

プリントが与える:<a list of 9 Text xticklabel objects><a list of 10 Text xticklabel objects> だから私は、追加のリスト項目は、指数のテキストオブジェクトであると考えていました。しかし、テキストを印刷すると空です。

この指数にテキストオブジェクトとしてアクセスする方法はありますか?それから、その位置を設定することは可能でしょうか?

+0

あなたは 'ax2.xaxis.get_offset_textを()'使用して指数を含む 'Text'オブジェクトを取得することができます。これには '.set_position()'メソッドがありますが、キャンバスが再描画されるたびに位置がリセットされるようです。これがどこで起こるかを知ることができれば、テキストの位置を上書きできるはずです。 –

答えて

0

Text objectsのリストにアクセスするには、そのクラスのメソッドを使用できます。 get_text()

print([s.get_text() for s in ax2.get_xmajorticklabels()]) 

しかし、その結果は

<a list of 9 Text xticklabel objects> 
[u'', u'', u'', u'', u'', u'', u'', u'', u''] 
<a list of 10 Text xticklabel objects> 
[u'', u'', u'', u'', u'', u'', u'', u'', u'', u''] 
fig.tight_layout()を実行した後で

、これら Text xticklabel objectsの出力は今挙げられる: -7ような指数について

<a list of 9 Text xticklabel objects> 
[(0.0, 0), (20.0, 0), (40.0, 0), (60.0, 0), (80.0, 0), (100.0, 0), (120.0, 0), (140.0, 0), (160.0, 0)] 

<a list of 10 Text xticklabel objects> 
[(0.0, 0), (2.0000000000000002e-05, 0), (4.0000000000000003e-05, 0), (6.0000000000000008e-05, 0), (8.0000000000000007e-05, 0), (0.0001, 0), (0.00012000000000000002, 0), (0.00014000000000000001, 0), (0.00016000000000000001, 0), (0, 0)] 

、実際には両方のリストに同じ量のオブジェクトがあります。

ラベルを配置するための最も近い方法は、here by Scottです。残念ながら、x軸は水平方向に、y軸は垂直にしか動かないので、グラフ上にラベルを配置することはできません。

ax2.get_xaxis().get_offset_text().set_position((0.5,0)) 

exponent label moved horizontally

+1

ありがとうございます!私は指数がオフセットテキストにあるとは思わなかった。 – kluonk

+0

'set_position(x、y)'、 'y'を変更しても効果がないようですね? – zyxue

関連する問題