Нанесение научного формата на метку оси и различный размер. - PullRequest
1 голос
/ 26 июля 2011

Я написал приведенный ниже код для вывода рисунка, но все еще нужно выяснить две вещи.

1) Как получить научную запись на оси для метки второстепенного тика.Так как он показывает только 5000, я полагаю, что я мог бы просто изменить это в функции showOnlySomeTicks, чтобы вернуть строку в научном формате.Есть лучший способ сделать это??Также лучший способ показать только 5000 второстепенных отметок (например, 5e5).2) Я хочу сделать размер метки второстепенной отметки меньшим, чем размер метки основной метки.Как мне поступить?

Приветствия за любую помощь

import matplotlib.pyplot as plt
import matplotlib.ticker as tick
from numpy import load, sqrt, shape, size

def clear_spines(ax):
    ax.spines['top'].set_color('none')
    ax.spines['right'].set_color('none')
def set_spineLineWidth(ax, lineWidth):
    for i in ax.spines.keys():
        ax.spines[i].set_linewidth(lineWidth)
def showOnlySomeTicks(x, pos):
    s = str(int(x))
    if x == 5000:
        return s
    return ''


plt.close('all')
spineLineWidth = 0.5
inFile = '7semiat220'
outFile = inFile
inExt = '.npz'
outExt = ['.eps','.pdf','.tif','.png']
mydpi = 300
storeMat = load(inFile+inExt)
fig_width_pt = 246.0  
inches_per_pt = 1.0/72.27               
golden_mean = (sqrt(5)-1.0)/2.0         
fig_width = fig_width_pt*inches_per_pt  
fig_height = 2 #fig_width*golden_mean       
fig_size = [fig_width,fig_height]
tick_size = 9
fontlabel_size = 10.5
params = {'backend': 'wxAgg', 'axes.labelsize': fontlabel_size, 'text.fontsize': fontlabel_size, 'legend.fontsize': fontlabel_size, 'xtick.labelsize': tick_size, 'ytick.labelsize': tick_size, 'text.usetex': True, 'figure.figsize': fig_size}
plt.rcParams.update(params)
x = storeMat['freq']
y = storeMat['mag']
sizeX = x.size
fig = plt.figure(1)
#figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
#fig.set_size_inches(fig_size)
plt.clf()
ax = plt.axes([0.125,0.2,0.95-0.125,0.95-0.2])
plt.plot(x,y,'k',label='$\sin(x)$')
plt.xscale('log')
plt.xlim(x[sizeX-1]*.95,x[0]*1.05)
plt.xlabel('Log Frequency (Hz)')
plt.ylabel('Magnitude')
set_spineLineWidth(ax,spineLineWidth)
clear_spines(ax)
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
ax.xaxis.set_minor_formatter(tick.FuncFormatter(showOnlySomeTicks))
#plt.legend()
for i in outExt:
    plt.savefig(outFile+i, dpi = mydpi)
#def grayConvert()
#Image.open('color.png').convert('L').save('bw.png') #direct method
#image=Image.open('colored_image.png').convert("L") #other manipulations can use this method
#arr=np.asarray(image)
#p.figimage(arr,cmap=cm.Greys_r)
#p.savefig('grayed.png')

output

1 Ответ

0 голосов
/ 29 июля 2011

Вы должны использовать комбинацию Formatter и Locator

Локатор скажет, где должен быть установлен тик.

Форматер вернет строку, которая будет отображаться в этом месте.

см .: Документация по модулю тикера

ax.xaxis.set_minor_locator( xLocator )
ax.xaxis.set_minor_formatter( xminorFormatter )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...