I know this question has already been answered (and quite well, in my view), but there was a different question here which had a comment @NRH that mentioned the graphical explanation, and rather than put the pictures there it would seem more fitting to put them here.
So, here goes. It's not as cool as an R package. But it's self-contained and doesn't require a subscription to JSTOR.
In the following we're talking about a simple random walk, $X_{i}= \pm 1$ with equal probability, and we are calculating running averages,
$$
\frac{S_{n}}{n} = \frac{1}{n}\sum_{i = 1}^{n}X_{i},\quad n=1,2,\ldots.
$$

The SLLN (convergence almost surely) says that we can be 100% sure that this curve stretching off to the right will eventually, at some finite time, fall entirely within the bands forever afterward (to the right).
The R code used to generate this graph is below (plot labels omitted for brevity).
n <- 1000; m <- 50; e <- 0.05
s <- cumsum(2*(rbinom(n, size=1, prob=0.5) - 0.5))
plot(s/seq.int(n), type = "l", ylim = c(-0.4, 0.4))
abline(h = c(-e,e), lty = 2)

The WLLN (convergence in probability) says that a large proportion of the sample paths will be in the bands on the right-hand side, at time $n$ (for the above it looks like around 48 or 9 out of 50). We can never be sure that any particular curve will be inside at any finite time, but looking at the mass of noodles above it'd be a pretty safe bet. The WLLN also says that we can make the proportion of noodles inside as close to 1 as we like by making the plot sufficiently wide.
The R code for the graph follows (again, skipping labels).
x <- matrix(2*(rbinom(n*m, size=1, prob=0.5) - 0.5), ncol = m)
y <- apply(x, 2, function(z) cumsum(z)/seq_along(z))
matplot(y, type = "l", ylim = c(-0.4,0.4))
abline(h = c(-e,e), lty = 2, lwd = 2)