You stipulate that the frequency resolution is 4Hz. This means that the time duration of the signal you convert is 0.25 seconds. It is easy to see that the 1Hz, 2Hz signals etc will not have had a whole number of cycles in that time.
Unfortunately, when you use the FFT (which is just an efficient way to do a DFT) to compute the spectrum of a signal which contains incomplete cycles of sine waves, the energy will 'leak' between bins.
If you crank up a copy of MATLAB, or Octave, or SciPy with Python, and load these waveforms, or better still just one waveform so as not to confuse yourself, into a signal and FFT them, then this is what you will see. Using a 1Hz, or 2Hz, or 3Hz input signal will result in some energy ending up in every bin. Using a 4Hz signal, because it fits exactly into 0.25 seconds, will give you energy in just the 4Hz bin, and nowhere else.
There are a number of technicalities to be mastered to get 'sensible' spectrum analysis type results out of an FFT when incomplete cycles of sine waves go in. Using a window function to multiply the signal before FFTing reduces the effect of partial cycles spilling energy into the wrong bins. Generally, a resolution of about 20% the spacing of your input signals is needed if you want to resolve them, using typical windows.
There is not the space in an answer like this for a full tutorial on spectrum analysis. Just be aware that an FFT is only part of what's needed to get from time signals to a meaningful power spectrum.
The output of the FFT is often called 'bins'. This is just terminology. In an n-point times series, you have a signal described by n complex values, that are usually called samples, sometimes 'time samples'. When the signal is FFT'd, you have a different description of exactly the same signal, with the same total power (see Parseval's theorem), with n complex frequency values, that are sometimes called 'frequency samples', but more often called 'bins'. Both bins and samples run from 0 to n-1, beware Matlab that uses 1 to n indexing!
The amplitude of the Nth bin, is the voltage of the input sinewave with N cycles in the length of the time input. Nothing more, nothing less. The FFT assumes that all input sinewaves are exactly periodic. If you try to put in one that isn't, it will assume that it is, giving you results you don't expect for spectrum analysis. So when your output has 4Hz resolution, it only expects input multiples of 4Hz. A short length of 1Hz signal is therefore broken down into components at 4Hz and multiples thereof that will reconstruct its shape.
Because of this assumption of input periodicity, the FFT probably isn't the best place to start when trying to understand spectral analysis.
Unless - until you get happy with what's going on, always use a long FFT, use a resolution better than 20% of your finest input frequency spacing. This will guarrantee you at least 5 cycles difference in the input. This means that spectral leakage will at least be manageable, you will see something that looks plausible, even if it's not strictly correct. Then later, you can add a window function (look these up) and this 5 cycle rule will mean that you will still be able to resolve your input signals, while getting much less leakage than you had before.
I have had a quick look around the web, and haven't found anything worth linking to you, because I note the key word 'intuitive', and most stuff I can find is full of formulae.
You need to play with some inputs, and see some outputs. Get a copy of MATLAB (low cost to students), Octave (free), Python+SciPy (free) or even an Excel spreadsheet (ubiquitous), build some time series, and see where the spectrum power goes. Keep the resolution fine, that is at least 5 cycles in the time record, and 5 cycles difference between closest spaced signals. Keep the signals an integer number of cycles, at least at first.