2016-08-31 9 views
2

TLでSymLogNormの正規化とticklabels; DR

をあなたは...はmatplotlibの

  • LogFormatterは、すべてのラベルのための科学的表記法を使用するように強制できますか?現在は、0より小さい値、または1000より大きい値に使用します。私は見つけることができるどんなset_powerlimit方法も公開していないようです。それを正しくする方法はありますか、別のフォーマッターを使うべきですか?どれ?

  • -1e+02の代わりに、指数付きの最初のプロットのような上付き文字で科学記法を取得しますか?そこにきれいにフォーマットxticksを取得するための簡単な方法であったとすれば、当然のことながら

... plt.xscale('symlog')コールも右のx軸のためにそれを取得するので、スケール自体の限界のようには見えません。 symlogスケーリングを使用したカラーマップのラベルも素晴らしいでしょう。しかし、正直なところ、documentation自体の展示が、私はあまり希望を持っていないことをカラーバーで...見ている: - 最初から起動/


を...

matplotlibのは、いくつかの規格化を提供していますcolorbarと一緒に使用できます。これはdocumentationでうまく説明されています。中でも

、対数一方(mpl.colors.LogNorm)はxticksが均等に分散それ

  1. 場所として、特別に良好に機能します。
  2. は、と見た目がよく見える科学記法**を使用してティックラベルをフォーマットします。

単独で。最小例:一方

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import colors, ticker 

data = np.arange(4).reshape(-1,1)+np.arange(4).reshape(1,-1) 
data = 10**(data/2.) 

plt.figure(figsize=(4,3)) 
plt.imshow(data, interpolation="None", cmap="gray", norm=colors.LogNorm()) 
plt.colorbar() 
plt.show() 

imshow with LogNorm normalization

、対称対数一方(matplotlib.colors.SymLogNorm)はどちらも行いません。 This SO answerは、imshow用のラッパー関数を定義していますが、これは望みの結果に向かって進んでいますが、まだそれほど得られていません。

その関数の適応と最小限の例:

def imshow_symlog(arr, vmin=None, vmax=None, logthresh=5, logstep=1, 
        linscale=1, **kwargs): 
    # Adapted from https://stackoverflow.com/a/23118662 

    vmin = arr.min() if vmin is None else vmin 
    vmax = arr.max() if vmax is None else vmax 
    img=plt.imshow(arr, 
        vmin=float(vmin), vmax=float(vmax), 
        norm=colors.SymLogNorm(10**-logthresh, linscale=linscale), 
        **kwargs) 

    maxlog=int(np.ceil(np.log10(vmax))) 
    minlog=int(np.ceil(np.log10(-vmin))) 

    #generate logarithmic ticks 
    tick_locations=([-(10**x) for x in xrange(-logthresh, minlog+1, logstep)][::-1] 
        +[0.0] 
        +[(10**x) for x in xrange(-logthresh,maxlog+1, logstep)]) 

    cb=plt.colorbar(ticks=tick_locations, format=ticker.LogFormatter()) 
    return img,cb 

data2 = data - data[::-1,::-1] 
plt.figure(figsize=(4,3)) 
img, cb = imshow_symlog(data2, interpolation="None", cmap="gray", logthresh=0) 
plt.show() 

imshow with SymLogNorm normalization

答えて

1

変更LogFormatterMathtextと機能がフォーマッタ:

cb=plt.colorbar(ticks=tick_locations, format=ticker.LogFormatterMathtext()) 

フォーマッタが明らかに素敵な欠け(もしあれば)ドキュメントが、これはあなたが望むことをするようです:

enter image description here

+0

素晴らしい!時々、matplotlibのドキュメントは少し乏しいです...だから、今のところimshow_symlogラッパー関数を取り除く方法はないのです...誰かがもっとプラグをつくかどうかを少し見てみましょう - と - 再生* ishの解決策、それ以外の場合は私の質問に答えます。 – mgab