2017-08-18 14 views
2

私は指数関数ではなく、10の累乗に科学記法を強制するいくつかのデータをプロットしました。 HERESにコードのスニペット:y軸スケール係数をy軸ラベルの次の位置に移動するにはどうすればよいですか?

import matplotlib.ticker as mticker 

formatter = mticker.ScalarFormatter(useMathText=True) 
formatter.set_powerlimits((-3,2)) 
ax.yaxis.set_major_formatter(formatter) 

しかしながら、×10^-4のスケールファクタは、グラフの左上隅に表示されます。

下の図に示すように、この倍率の位置をyラベルの隣に押し込む簡単な方法はありますか?

enter image description here

答えて

1

あなたが設定することができ、それは元の位置に表示されないように、目に見えないにオフセット。

ax.yaxis.offsetText.set_visible(False) 

あなたはそれ

offset = ax.yaxis.get_major_formatter().get_offset() 
ax.yaxis.set_label_text("original label" + " " + offset) 

それがラベル内に表示されるように更新ラベルフォーマッタからのオフセットことがあります。

以下は、オフセットを変更するとラベル内で更新されるように、コールバックを持つクラスを使用してこれを自動化します。

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.ticker as mticker 

class Labeloffset(): 
    def __init__(self, ax, label="", axis="y"): 
     self.axis = {"y":ax.yaxis, "x":ax.xaxis}[axis] 
     self.label=label 
     ax.callbacks.connect(axis+'lim_changed', self.update) 
     ax.figure.canvas.draw() 
     self.update(None) 

    def update(self, lim): 
     fmt = self.axis.get_major_formatter() 
     self.axis.offsetText.set_visible(False) 
     self.axis.set_label_text(self.label + " "+ fmt.get_offset()) 


x = np.arange(5) 
y = np.exp(x)*1e-6 

fig, ax = plt.subplots() 
ax.plot(x,y, marker="d") 

formatter = mticker.ScalarFormatter(useMathText=True) 
formatter.set_powerlimits((-3,2)) 
ax.yaxis.set_major_formatter(formatter) 

lo = Labeloffset(ax, label="my label", axis="y") 


plt.show() 

enter image description here

関連する問題