2015-04-22 241 views
-1

我想用对数坐标轴限制我的坐标轴的y轴坐标。但是,添加plt.ylim((10^(-1),10^(0)))似乎没有任何改变。我是否应该使用不同的命令,因为我正在使用plt.semilogy?以下是代码和数据。设置对数坐标轴的y轴极限(使用plt.semilogy)

# Generate loss plots 
    # --------------- Latex Plot Beautification -------------------------- 
    fig_width_pt = 492.0 #246.0 # Get this from LaTeX using \showthe\columnwidth 
    inches_per_pt = 1.0/72.27    # Convert pt to inch 
    golden_mean = (np.sqrt(5)-1.0)/2.0   # Aesthetic ratio 
    fig_width = fig_width_pt*inches_per_pt # width in inches 
    fig_height = fig_width*golden_mean  # height in inches 
    fig_size = [fig_width+1,fig_height+1] 
    params = {'backend': 'ps', 
       'axes.labelsize': 12, 
       'font.size': 12, 
       'legend.fontsize': 10, 
       'xtick.labelsize': 10, 
       'ytick.labelsize': 10, 
       'text.usetex': False, 
       'figure.figsize': fig_size} 
    plt.rcParams.update(params) 
    # --------------- Latex Plot Beautification -------------------------- 

    train = {} 

    tmp = list() 
    with open('loss.csv', 'rb') as csv_file: 
     reader = csv.reader(csv_file) 
     for i, row in enumerate(reader): 
      if i != 0: 
       tmp.append(row) 


    tmp  = np.array(tmp)  

    train['iters'], train['seconds'], train['loss'], train['learn_rate'] = tmp[:,0], tmp[:,1], tmp[:,2], tmp[:,3] 

    plt.subplot(211) 
    plt.semilogy(train['iters'],train['loss'],'b',lw=2) 
    plt.ylabel('loss') 
    plt.ylim((10^(-1),10^(0))) 

    plt.subplot(212) 
    plt.semilogy(train['iters'],train['learn_rate'],'b',lw=2) 
    plt.xlabel('iterations') 
    plt.ylabel('learning rate') 

    plt.show() 

loss.csv

NumIters,Seconds,TrainingLoss,LearningRate 
    0.0,0.486213,0.693148,nan 
    1000.0,7.557165,0.0961085,0.05 
    2000.0,14.041684,0.00384812,0.05 
    3000.0,20.410506,7.34072,0.05 
    4000.0,26.772446,4.78843,0.05 
    5000.0,34.117291,2.45869,0.05 
    6000.0,40.249146,0.179548,0.05 
    7000.0,46.377004,0.0033729,0.05 
    8000.0,52.499923,0.00020626,0.05 
    9000.0,59.317026,2.0962,0.05 
    10000.0,66.679739,1.20523,0.05 
    11000.0,72.846874,0.00894074,0.05 
    12000.0,78.87727,2.37395,0.05 
    13000.0,84.950737,0.00172985,0.05 
    14000.0,91.036988,8.13143,0.05 
    15000.0,98.153062,2.90689,0.05 
    16000.0,104.252995,1.78791,0.05 
    17000.0,110.286827,5.10336,0.05 
    18000.0,116.47252,3.34482,0.05 
    19000.0,122.683825,0.00838974,0.05 
    20000.0,129.637347,0.00341582,0.05 
    21000.0,135.640689,1.66777,0.05 
    22000.0,141.66995,3.30503,0.05 
    23000.0,147.721727,2.53775,0.05 
    24000.0,154.084407,1.35748,0.05 
    25000.0,161.426044,2.28748,0.05 
    26000.0,168.492162,0.00397386,0.05 
    27000.0,174.669545,0.000113542,0.05 
    28000.0,180.803535,2.5192,0.05 
    29000.0,187.004627,0.0019179,0.05 
    30000.0,194.150244,4.36825,0.05 
    31000.0,200.404565,1.38513,0.05 
    32000.0,206.412659,0.0108084,0.05 
    33000.0,212.437014,6.41096,0.05 
    34000.0,218.56177,0.000235395,0.05 
    35000.0,225.853988,7.88834,0.05 
    36000.0,231.888062,0.00109338,0.05 
    37000.0,238.976116,4.46498,0.05 
    38000.0,246.112036,0.00246135,0.05 
    39000.0,252.92424,0.00154073,0.05 
    40000.0,261.114472,1.49658,0.05 
    41000.0,268.695987,3.09471,0.05 
    42000.0,275.331985,0.000266829,0.05 
    43000.0,282.34568,1.06778,0.05 
    44000.0,290.059307,5.98044,0.05 
    45000.0,299.376506,0.00154176,0.05 
    46000.0,306.722876,9.46019,0.05 
    47000.0,314.33918,1.1353,0.05 
    48000.0,321.358202,7.14507,0.05 
    49000.0,328.710997,1.00035,0.05 
    50000.0,335.206681,4.40056,0.05 

回答

4

^运算符执行按位异或:10^-1 = -11,10^0为10(参考文献:Python operators)。使用**提高功率,或使用pow()函数。所以,你可以使用两种:

plt.ylim((10**-1,10**0)) 

,或者如果您想更详细:

plt.ylim((pow(10,-1),pow(10,0)))