Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I'd like to limit the y-scale for my plot with a logarithmic axis. However, adding plt.ylim((10^(-1),10^(0))) doesn't seem to change anything. Should I use a different command seeing as I'm using plt.semilogy? Below is the code and the data.

# 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
like image 790
pir Avatar asked Jun 20 '26 04:06

pir


1 Answers

The ^ operator performs bitwise exclusive or: 10^-1 = -11, 10^0 is 10 (ref: Python operators). Use ** to raise to a power, or use the pow() function. So you could use either:

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

or if you want to be more verbose:

plt.ylim( (pow(10,-1),pow(10,0)) )
like image 172
bgstech Avatar answered Jun 22 '26 19:06

bgstech



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!