A nicely-spaced ASCII spiral
05AB1E, 13 11 bytes

Code:

Thanks to Emigna for saving two bytes!

LDÈ-Ì'#3Ý·Λ


Uses the 05AB1E encoding. Try it online!

Explanation

The lengths of each individual edge on the spiral starts with length 3 and gradually increases every two steps by two:

$$
3, 3, 5, 5, 7, 7, 9,\dots
$$

For a spiral with \$n\$ edges, we just need to trim this list to size \$n\$. This is done with the following piece of code:

L                # Create a list from [1 .. input]
 DÈ              # Duplicate and check for each number if even
   -             # Subtract that from the first list
    Ì            # Add 2


This basically gives us the desired list of lengths.

     '#          # Push the '#' character
       0246S     # Push the array [0, 2, 4, 6]
            Λ    # Write to canvas


The canvas works as a function that pops three parameters (where the rightmost parameter is popped first): &lt;length(s)&gt;, &lt;char(s)&gt;, &lt;direction(s)&gt;. The directions parameter is in this case a list of numbers. The numbers that correspond to the directions are:

$$
\left[\begin{array}{r}
7 &amp; 0 &amp; 1 \\
6 &amp; \circ &amp; 2 \\
5 &amp; 4 &amp; 3
\end{array}\right]
$$

In this case, [0, 2, 4, 6] corresponds to the directions list [↑, →, ↓, ←]. The canvas iterates over each length retrieved from the list of lengths, uses the '#' character and cyclically iterates over the directions list.