在轴标签上绘制科学格式,并在不同尺寸的小格式器文本大小上绘图

时间:2011-07-26 10:43:49

标签: python numpy matplotlib

我编写了下面的代码来输出数字,但仍需要弄清楚两件事。

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 :(得分:0)

您必须使用Formatter和Locator的组合

定位器将告诉应该放置刻度线。

Formatter将返回要在该位置显示的字符串。

请参阅:Ticker module documentation

ax.xaxis.set_minor_locator( xLocator )
ax.xaxis.set_minor_formatter( xminorFormatter )