2016-03-26 11 views
0

私のx軸は両方ともログスケールです。上側のx軸は下側の軸(この例では2乗)の関数です。双対対数軸の目盛りのラベルを10の累乗として表示するにはどうすればよいですか?

下軸の目盛りラベルが自動的に10の累乗でフォーマットされていますが、上部の軸がある別のデフォルトのフォーマット(科学的表記):

enter image description here

どのように私はこの問題を解決するのですか?

import numpy as np 
import matplotlib.pyplot as plt 

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

x = np.logspace(-9,0,10) 
x2 = x**2 
new_tick_locations = x[3:-3] 
new_tick_labels = x2[3:-3] 
y = np.ones(np.size(x)) 

ax1.semilogx(x,y) 
plt.grid(True) 
ax1.set_xlabel(r"Original x-axis: $X$") 

ax2.set_xscale('log') 
ax2.set_xlim(ax1.get_xlim()) 
ax2.set_xticks(new_tick_locations) 
ax2.set_xticklabels(new_tick_labels) 
ax2.set_xlabel(r"Modified x-axis: $X^2$") 
plt.show() 

答えて

0

これを修正するには少なくとも2つの方法があります。

  1. フォーマットはax2.set_xticklabels()

  2. コールする必要なく、単位変換や整形の両方を行うためにFuncFormaterを使用してそれらを割り当てる前に、あなたのnew_tick_labelsax2.set_xticklabels()

同じ行を置き換え FuncFormaterの恩恵を受けるために

new_tick_labels = ['$\mathdefault{10^{%i}}$' % np.log10(l) 
        for l in new_tick_labels] 
ax2.set_xticklabels(new_tick_labels) 

:このブロックで

ax2.set_xticklabels(new_tick_labels) 

:あなたはこの行を交換する必要があります第一の道を行くために

from matplotlib.ticker import FuncFormatter 
ax2.xaxis.set_major_formatter(
    FuncFormatter(lambda x, p: 
     '$\mathdefault{10^{%i}}$' % np.log10(x**2))) 

あなたはFuncFormaterを使用すると、new_tick_labels = x2[3:-3]を削除することもできます。

関連する問題