2016-05-24 12 views
0

非常に特殊な方法でmatplotlibグラフの軸ラベルをフォーマットしようとしています。私のコードは以下の通りです:あなたが見ることができるようにmatplotlibの特定の軸フォーマット

import matplotlib.pyplot as plt 

some_matrix = ... 
alpha_values = list(np.power([2.0]*20, xrange(-12,8))) 
gamma_values = list(np.power([2.0]*20, xrange(-12,8))) 

plotted_matrix = plt.matshow(some_matrix) 
plt.colorbar() 
xtick_marks = np.arange(len(alpha_values)) 
ytick_marks = np.arange(len(gamma_values)) 
plt.xticks(xtick_marks,alpha_values) 
plt.yticks(ytick_marks,gamma_values) 
plt.xlabel('Alpha values',size='small') 
plt.ylabel('Gamma values',size='small') 

x(アルファさん)とy(ガンマの)ラベル、2のべき乗としての軸を表示することが可能である場合、私は知りたいのですが2のすべての権限がありますすなわち、ラベル2^-1,2^1,2^2、...(可能であれば、適切な上付き文字としてのパワーを持つ)を持つ。

y_formatter = plt.ticker.ScalarFormatter('#**2') 
plotted_matrix.yaxis.set_major_formatter(y_formatter) 

しかし、私はエラーメッセージ'AxesImage' object has no attribute 'yaxis'を取得:

私が書き留めしようとしています。

答えて

0

目盛りラベルを定義するには、ticker.MultipleLocatorを配置します。

Axesインスタンスではなく、matshowによって返されたAxesImageのダンプフォーマッタを設定しようとしているためにエラーが発生します。ここでは、matplotlibオブジェクト指向のアプローチを使用して、物事をより簡単にすることができます。

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

alpha_values = list(np.power([2.0]*20, xrange(-12,8))) 
gamma_values = list(np.power([2.0]*20, xrange(-12,8))) 

some_matrix = np.random.rand(len(alpha_values),len(gamma_values)) 

fig,ax = plt.subplots() 

plotted_matrix = ax.matshow(some_matrix) 
fig.colorbar(plotted_matrix) 

def tick_format(x,pos): 
    # Map range 0-20 to 2^-12 to 2^8 
    return "$2^{{ {:.0f} }}$".format(x-12) 

ax.xaxis.set_major_locator(ticker.MultipleLocator(2)) 
ax.xaxis.set_major_formatter(ticker.FuncFormatter(tick_format)) 
ax.yaxis.set_major_locator(ticker.MultipleLocator(1)) 
ax.yaxis.set_major_formatter(ticker.FuncFormatter(tick_format)) 

ax.set_xlabel('Alpha values',size='small') 
ax.set_ylabel('Gamma values',size='small') 

plt.show() 

enter image description here

+0

これは私が見つけたものと非常に似て、ありがとうございます。 –

0

私は別に力のシーケンスを定義する上で構成されて別のソースからの回答を得ている:

import matplotlib.pyplot as plt 

some_matrix = ... 
alpha_values = list(np.power([2.0]*20, xrange(-12,8))) 
gamma_values = list(np.power([2.0]*20, xrange(-12,8))) 

plotted_matrix = plt.matshow(some_matrix) 
plt.colorbar() 
alpha_powers = list(xrange(-12,8)) 
gamma_powers = list(xrange(-12,8)) 
xtick_marks = np.arange(len(alpha_values)) 
ytick_marks = np.arange(len(gamma_values)) 
xtick_format = ['2^{{{0}}}'.format(i) for i in alpha_powers] 
ytick_format = ['2^{{{0}}}'.format(i) for i in gamma_powers] 
plt.xticks(xtick_marks, xtick_format) 
plt.yticks(ytick_marks, ytick_format) 
plt.xlabel('$Alpha values$', size='small') 
plt.ylabel('$Gamma values$', size='small') 

結果は以下の通りである。

あなたは ticker.FuncFormatterを使用することができます

enter image description here