2016-10-28 10 views
1

Matplotlibの何十年ものログログプロットを作成しようとしています。しかし、私に返されるデフォルトのx軸目盛りは、一度に20年をカバーするので理想とはかけ離れており、その間にわずか4目盛りしかありません。私が使用していたコードは以下の通りです:Matplotlib:ログプロットの奇妙な二十年軸チック

rc('text', usetex=True) 
f,ax=plt.subplots(figsize=(10,8)) 
plt.xscale('log') 
plt.yscale('log') 
plt.ylim([1e26,1e29]) 
plt.xlim([20,1e10]) 
plt.xlabel(r'x',fontsize=22) 
plt.ylabel(r'y',fontsize=22) 
plt.tick_params(axis='both', which='major', labelsize=22,length=9,direction='in') 
plt.tick_params(axis='both', which='minor', labelsize=22,length=5,direction='in') 
ax.yaxis.set_tick_params(right='on',which='both') 
ax.xaxis.set_tick_params(top='on',which='both') 
plt.savefig('example.pdf',bbox_inches='tight') 

イメージが私に戻って次のようになります。

enter image description here

あなたが見ることができるように、主要なx軸ラベルが10^3から行きます一方、メジャーラベルの間にはわずか4つのx軸ラベルしかありません。私は10年ごとに主要なラベルを、y軸上に、各10年の間に標準の8ティックを付けたいと思っています。さらに、軸があまりにも乱雑にならないように、現在のようにX軸のラベルを貼ることが理想的です。つまり、10^3、10^5、10^7、10^9のラベルが付けられています。私はちょうど間のすべての十年にメジャー/マイナーダニを拡張したい。

ありがとうございます。また、有用であれば、私はmatplotlibバージョン2.0.0を使用しています。 2.0.0のみの追加機能のためには、このバージョン(古いバージョンではなく)を使用する必要があります。

答えて

1

v2では、マッチplotlibを変更して、大きな範囲にまたがる対数軸で描画するティック/ラベルの数を減らしたようです。以下のコードは、ダニを追加する方法の1つを示しています。このコードでは

import pylab as plt 
import numpy as np 
from matplotlib.ticker import LogLocator 

plt.rc('text', usetex=True) 
f,ax=plt.subplots(figsize=(10,8)) 
plt.xscale('log') 
plt.yscale('log') 
plt.ylim([1e26,1e29]) 
plt.xlim([20,1e10]) 
plt.xlabel(r'x',fontsize=22) 
plt.ylabel(r'y',fontsize=22) 
plt.tick_params(axis='both', which='major', labelsize=22,length=9,direction='in') 
plt.tick_params(axis='both', which='minor', labelsize=22,length=5,direction='in') 
ax.yaxis.set_tick_params(right='on',which='both') 
ax.xaxis.set_tick_params(top='on',which='both') 

# manipulate x-axis ticks and labels 
ax.xaxis.set_major_locator(LogLocator(numticks=15)) #(1) 
ax.xaxis.set_minor_locator(LogLocator(numticks=15,subs=np.arange(2,10))) #(2) 
for label in ax.xaxis.get_ticklabels()[::2]: 
    label.set_visible(False) #(3) 

plt.savefig('example.pdf',bbox_inches='tight') 

私は大目盛りごとに十年を取得し、8マイナーは、他のすべての主要なダニのための主要な目盛り、軸ラベルの間でダニ。しかし、私はちょうどこの答えを投稿するためのアカウントを作ったので、私は対応するイメージを共有するのに十分な評判を持っていません:(

各ラベル付きの行のいくつかの詳細は、上記のコードのコメントを参照してください。

  1. 可目盛りの最大数を増加させる。値15がV1から閾値である、matplotlib/lib/matplotlib/ticker.pyでソースコードを参照してください。
  2. プロットの軸は、文書化されていない(5つのより多い数十年に及ぶが、ソースコードを見ると)、matplotlib v2のデフォルトでは、(2,4,6,8)でのみマイナーティックを描画します。これはマイナーダニの全範囲を指定します。
  3. 他のすべてのx軸ラベルをオフにします。 this answer