设置对数轴绘图的 y 限制(使用 plt.semilogy)

Setting y-limit for plot with logarithmic axis (using plt.semilogy)

我想用对数轴限制绘图的 y 尺度。但是,添加 plt.ylim((10^(-1),10^(0))) 似乎没有任何改变。当我使用 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

^ 运算符执行按位异或:10^-1 = -11,10^0 为 10(参考:Python operators)。使用 ** 提升到一个幂,或使用 pow() 函数。所以你可以使用:

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

或者如果你想更详细一点:

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