Search code examples
rplotdata-visualizationaxis-labelsarima

How to change the y-axis scale in plot for a forecast object?


I have the following graph made with plot. I basically plotted the outcome of an model. The problem, as you can see, is the y-axis. I want to rescale it so that it shows values as integers and not in scientific notation. I already tried with ylim = c(a,b) but it didn't work.

This is the data to plot:

structure(list(method = "ARIMA(1,2,0)", model = structure(list(
coef = c(ar1 = 0.165440211592995), sigma2 = 314372.871343033, 
var.coef = structure(0.0387588365491072, .Dim = c(1L, 1L), .Dimnames = list(
    "ar1", "ar1")), mask = TRUE, loglik = -201.464633423226, 
aic = 406.929266846451, arma = c(1L, 0L, 0L, 0L, 1L, 2L, 
0L), residuals = structure(c(0.144002762945477, -0.257594259049227, 
169.62992413163, -40.455716409227, 3.98528254071288, 325.669119576814, 
-277.933508979317, 161.058607396831, 100.485413762468, 161.981734397248, 
-21.1101185099251, 467.511038095663, 167.408540762885, 264.467148159716, 
-870.459264535865, 1471.66097350626, 116.971877311758, -159.918791518434, 
967.205782005673, -64.1682010133445, -372.385939678148, 352.062155538701, 
632.526018003249, 1002.33521590517, 479.534164073812, 461.147699502253, 
-1091.4663608196, -614.056109041783), .Tsp = c(1, 28, 1), class = "ts"), 
call = arima(x = corona_total$Total_Cases, order = c(1, 2, 
    0)), series = "corona_total$Total_Cases", code = 0L, 
n.cond = 0L, nobs = 26L, model = list(phi = 0.165440211592995, 
    theta = numeric(0), Delta = c(2, -1), Z = c(1, 2, -1), 
    a = c(-779, 59138, 53578), P = structure(c(-2.22044604925031e-16, 
    2.86887593857152e-17, -5.56124814802562e-17, 2.86887593857152e-17, 
    -3.31423141286073e-17, -1.61722928090181e-32, -5.56124814802562e-17, 
    -3.75958688714994e-17, -5.56124814802562e-17), .Dim = c(3L, 
    3L)), T = structure(c(0.165440211592995, 1, 0, 0, 2, 
    1, 0, -1, 0), .Dim = c(3L, 3L)), V = structure(c(1, 0, 
    0, 0, 0, 0, 0, 0, 0), .Dim = c(3L, 3L)), h = 0, Pn = structure(c(1, 
    -5.4830714621183e-18, 1.21812129054869e-17, -5.48307146211831e-18, 
    -3.31423141286073e-17, -1.84889274661175e-32, 1.21812129054869e-17, 
    -3.75958688714994e-17, -5.56124814802562e-17), .Dim = c(3L, 
    3L))), x = structure(c(322, 400, 650, 888, 1128, 1694, 
2036, 2502, 3089, 3858, 4636, 5883, 7375, 9172, 10149, 12462, 
15113, 17660, 21157, 24747, 27980, 31506, 35713, 41035, 47021, 
53578, 59138, 63919), .Tsp = c(1, 28, 1), class = "ts")), class = "Arima"), 
level = c(80, 95), mean = structure(c(68571.1220751691, 73201.9225591844, 
77829.1955946478, 82455.8850482763, 87082.4779540027, 91709.0548868236, 
96335.6291770837, 100962.203030158, 105588.776810904, 110215.350579684, 
114841.924346485, 119468.498112958, 124095.071879377, 128721.645645786, 
133348.219412195, 137974.793178603, 142601.366945011, 147227.940711419, 
151854.514477827, 156481.088244235, 161107.662010643, 165734.235777051, 
170360.80954346, 174987.383309868, 179613.957076276, 184240.530842684, 
188867.104609092, 193493.6783755, 198120.252141908, 202746.825908316, 
207373.399674724, 211999.973441132, 216626.54720754, 221253.120973948, 
225879.694740356, 230506.268506765, 235132.842273173, 239759.416039581, 
244385.989805989, 249012.563572397, 253639.137338805, 258265.711105213, 
262892.284871621, 267518.858638029, 272145.432404437, 276772.006170845, 
281398.579937253, 286025.153703662, 290651.72747007, 295278.301236478, 
299904.875002886, 304531.448769294, 309158.022535702, 313784.59630211, 
318411.170068518, 323037.743834926, 327664.317601334, 332290.891367742, 
336917.46513415, 341544.038900558), .Tsp = c(29, 88, 1), class = "ts"), 
lower = structure(c(67852.5693904542, 71488.0378850631, 74869.4056219101, 
78042.7559156995, 81035.3037876344, 83865.5016552685, 86546.988586515, 
89090.4113186268, 91504.3946218833, 93796.1160212266, 95971.6728237902, 
98036.3298321095, 99994.6937502293, 101850.840164951, 103608.408563905, 
105270.675078771, 106840.60926587, 108320.919172912, 109714.087632186, 
111022.401864165, 112247.977899771, 113392.780933102, 114458.642437768, 
115447.274680314, 116360.283118863, 117199.177067588, 117965.378927058, 
118660.232219392, 119285.008620154, 119840.914142592, 120329.094601246, 
120750.640459457, 121106.591147333, 121397.938922313, 121625.632332819, 
121790.579335963, 121893.650112513, 121935.679615911, 121917.46988679, 
121839.792160025, 121703.388787634, 121508.974997728, 121257.240507039, 
120948.851002351, 120584.449504222, 120164.657624752, 119690.076729762, 
119161.289014511, 118578.858501069, 117943.331964511, 117255.239794357, 
116515.096796942, 115723.402943843, 114880.644070922, 113987.29253211, 
113043.807811626, 112050.637097962, 111008.215822666, 109916.968166633, 
108777.307536393, 67472.1905761175, 70580.7621429779, 73302.5874546909, 
75706.5864702675, 77834.1231526988, 79713.3753855171, 81365.1952663977, 
82805.8644073931, 84048.5730632326, 85104.2982790952, 85982.3650762524, 
86690.8252744766, 87236.7242194817, 87626.2949833746, 87865.1036821527, 
87958.1607268483, 87910.0076619409, 87724.7860890043, 87406.2931723477, 
86958.0269138267, 86383.2235034666, 85684.8884462828, 84865.8227394482, 
83928.6450686659, 82875.8107702521, 81709.6281410368, 80432.2725549711, 
79045.7987518185, 77552.151591525, 75953.1755121868, 74250.6228859222, 
72446.1614324952, 70541.3808230744, 68537.798584461, 66436.8653962784, 
64239.9698590982, 61948.4427995644, 59563.561168772, 57086.5515820169, 
54518.5935412548, 51860.8223759273, 49114.3319330342, 46280.1770432903, 
43359.3757867774, 40352.9115785747, 37261.7350923526, 34086.7660377659, 
30828.8948056289, 27488.983993257, 24067.8698209688, 20566.3634495346, 
16985.2522073028, 13325.3007348137, 9587.25205390016, 5771.82856756041, 
1879.73299626436, -2088.35074420535, -6131.75671876397, -10249.8361987147, 
-14441.9569333302), .Dim = c(60L, 2L), .Dimnames = list(NULL, 
    c("80%", "95%")), .Tsp = c(29, 88, 1), class = c("mts", 
"ts", "matrix")), upper = structure(c(69289.674759884, 74915.8072333057, 
80788.9855673855, 86869.0141808532, 93129.6521203709, 99552.6081183786, 
106124.269767652, 112833.994741689, 119673.158999925, 126634.585138142, 
133712.175869179, 140900.666393806, 148195.450008524, 155592.451126622, 
163088.030260485, 170678.911278435, 178362.124624152, 186134.962249926, 
193994.941323469, 201939.774624305, 209967.346121516, 218075.690621001, 
226262.976649151, 234527.491939421, 242867.631033688, 251281.88461778, 
259768.830291125, 268327.124531608, 276955.495663662, 285652.73767404, 
294417.704748202, 303249.306422807, 312146.503267748, 321108.303025584, 
330133.757147894, 339221.957677567, 348372.034433833, 357583.15246325, 
366854.509725187, 376185.334984769, 385574.885889976, 395022.447212698, 
404527.329236203, 414088.866273707, 423706.415304653, 433379.354716939, 
443107.083144745, 452889.018392812, 462724.59643907, 472613.270508444, 
482554.510211415, 492547.800741645, 502592.64212756, 512688.548533298, 
522835.047604926, 533031.679858227, 543277.998104707, 553573.566912819, 
563917.962101668, 574310.770264724, 69670.0535742206, 75823.0829753909, 
82355.8037346047, 89205.1836262851, 96330.8327553065, 103704.73438813, 
111306.06308777, 119118.541652923, 127128.980558576, 135326.402880273, 
143701.483616717, 152246.170951439, 160953.419539271, 169816.996308198, 
178831.335142237, 187991.425630358, 197292.726228081, 206731.095333834, 
216302.735783307, 226004.149574644, 235832.10051782, 245783.58310782, 
255855.796347471, 266046.121551069, 276352.103382299, 286771.433544331, 
297301.936663213, 307941.557999181, 318688.352692291, 329540.476304445, 
340496.176463526, 351553.785449769, 362711.713592006, 373968.443363436, 
385322.524084435, 396772.567154431, 408317.241746781, 419955.270910389, 
431685.428029961, 443506.533603539, 455417.452301683, 467417.090277392, 
479504.392699952, 491678.341489281, 503937.9532303, 516282.277249338, 
528710.393836741, 541221.412601694, 553814.470946882, 566488.732651987, 
579243.386556237, 592077.645331285, 604990.74433659, 617981.94055032, 
631050.511569476, 644195.754673588, 657416.985946874, 670713.539454249, 
684084.766467015, 697530.034734447), .Dim = c(60L, 2L), .Dimnames = list(
    NULL, c("80%", "95%")), .Tsp = c(29, 88, 1), class = c("mts", 
"ts", "matrix")), x = structure(c(322, 400, 650, 888, 1128, 
1694, 2036, 2502, 3089, 3858, 4636, 5883, 7375, 9172, 10149, 
12462, 15113, 17660, 21157, 24747, 27980, 31506, 35713, 41035, 
47021, 53578, 59138, 63919), .Tsp = c(1, 28, 1), class = "ts"), 
series = "corona_total$Total_Cases", fitted = structure(c(321.855997237055, 
400.257594259049, 480.37007586837, 928.455716409227, 1124.01471745929, 
1368.33088042319, 2313.93350897932, 2340.94139260317, 2988.51458623753, 
3696.01826560275, 4657.11011850993, 5415.48896190434, 7207.59145923711, 
8907.53285184028, 11019.4592645359, 10990.3390264937, 14996.0281226882, 
17819.9187915184, 20189.7942179943, 24811.1682010133, 28352.3859396781, 
31153.9378444613, 35080.4739819968, 40032.6647840948, 46541.4658359262, 
53116.8523004977, 60229.4663608196, 64533.0561090418), .Tsp = c(1, 
28, 1), class = "ts"), residuals = structure(c(0.144002762945477, 
-0.257594259049227, 169.62992413163, -40.455716409227, 3.98528254071288, 
325.669119576814, -277.933508979317, 161.058607396831, 100.485413762468, 
161.981734397248, -21.1101185099251, 467.511038095663, 167.408540762885, 
264.467148159716, -870.459264535865, 1471.66097350626, 116.971877311758, 
-159.918791518434, 967.205782005673, -64.1682010133445, -372.385939678148, 
352.062155538701, 632.526018003249, 1002.33521590517, 479.534164073812, 
461.147699502253, -1091.4663608196, -614.056109041783), .Tsp = c(1, 
28, 1), class = "ts")), class = "forecast")

This is the code I used to make the plot (ignore the dotted exponential curve):

plot(forecast, shaded = TRUE, shadecols=NULL, lambda = NULL, col = 1, fcol = 4, pi.col=1, 
     pi.lty=2, ylim = NULL, main = "Out-of-Sample Forecast", ylab = "Number of Cases", 
     xlab = "Days (since 23/03/2020)") + abline(v = 28:29, col= "#FF000033", lty=1, lwd=5)

Output:

Can anyone please help me with this?


Solution

  • I couldn't load your object in my R session, so I'm assuming your plot works like a regular one.

    You have 2 options.

    1. Either you set options(scipen = 10) (or some high value), which is a quick fix, but if you need some plots with scientific notation and others without on the same graphics window, this will not work.

    2. You define the axis yourself, with the format you need. You can use axTicks(2) to get the position of default ticks and then format the labels as you need.

    I recommend option 2. Here's a quick example :

    x <- seq(1,10, l = 100)
    y <- x*1e5
    
    par(mfrow = c(1,2))
    
    plot(x, y, main = "custom axis", yaxt = "n")
    ticks <- axTicks(2) # get axis ticks
    axis(2, at = ticks, labels = formatC(ticks, format = 'd')) # make axis
    
    plot(x, y, main = "default axis")
    

    Outputs :

    enter image description here

    You can take a look at other potential options in the answers to this post