2017-03-07 13 views
3

軸を[1-9] x1e-3と[1-9]の2つの異なるデータセットの科学表記に固定しようとしています] x1e-4である。私は両方の軸を10^-4に設定し、小数点以下1桁(例えば%.1e)を持っています。ここで私は周りをプレイしようとしている単純なバージョンです:私は軸上の数字が少なくとも1であることを希望し、私は両方の力が同じになりたい。複数のサブプロットに対して固定指数と有効数字で科学記法を設定

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(1,9,9) 
y1 = x*10**(-4) 
y2 = x*10**(-3) 

fig, ax = plt.subplots(2,1,sharex=True) 

ax[0].plot(x,y1) 
ax[0].ticklabel_format(axis='y', style='sci', scilimits=(-4,-4)) 
ax[0].yaxis.major.formatter._useMathText = True 
ax[1].plot(x,y2) 
ax[1].ticklabel_format(axis='y', style='sci', scilimits=(-4,-4)) 
ax[1].yaxis.major.formatter._useMathText = True 

plt.show() 

enter image description here

答えて

3

あなたはmatplotlib.ticker.ScalarFormatterのサブクラスを作成し、(この場合は-4で)お好きな番号にorderOfMagnitude属性を修正することができます。
同様に、使用するフォーマットを修正することができます。これは一見複雑に見えるかもしれませんが

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

class OOMFormatter(matplotlib.ticker.ScalarFormatter): 
    def __init__(self, order=0, fformat="%1.1f", offset=True, mathText=True): 
     self.oom = order 
     self.fformat = fformat 
     matplotlib.ticker.ScalarFormatter.__init__(self,useOffset=offset,useMathText=mathText) 
    def _set_orderOfMagnitude(self, nothing): 
     self.orderOfMagnitude = self.oom 
    def _set_format(self, vmin, vmax): 
     self.format = self.fformat 
     if self._useMathText: 
      self.format = '$%s$' % matplotlib.ticker._mathdefault(self.format) 



x = np.linspace(1,9,9) 
y1 = x*10**(-4) 
y2 = x*10**(-3) 

fig, ax = plt.subplots(2,1,sharex=True) 

ax[0].plot(x,y1) 
ax[1].plot(x,y2) 

for axe in ax: 
    axe.yaxis.set_major_formatter(OOMFormatter(-4, "%1.1f")) 
    axe.ticklabel_format(axis='y', style='sci', scilimits=(-4,-4)) 

plt.show() 

はそれが本当にない唯一のことは、プライベートメソッド_set_orderOfMagnitude_set_formatを上書きし、それによって私たちは望んでいない背景には、いくつかの洗練されたものをやってからそれらを防ぐことです。結局、内部で何が起こるかに関係なく、self.orderOfMagnitudeは常に-4で、self.formatは常に"%1.1f"です。

enter image description here

+0

これは機能します。私はクラスの各定義が何をしているのかを説明できるかどうか、またシグニチャの数を固定するために拡大する必要があるのか​​どうか疑問に思っていました。たとえば、小数点以下を1桁(たとえば1.835 e-3 - > 18.3 e-4)@ImportanceOfBeingErnest – Gregory

+0

私はフォーマットを含む答えを編集しました。 – ImportanceOfBeingErnest

+0

ありがとう!私が知っている遅い答え – Gregory

関連する問題