I know this post could be shorter, but I wanted to outline a methodology, as in teach a man to fish..., so please bear with me. The first point to make is that the geometric scale of x vs y is easiest to manage from within the Graphics[] environment. Each Plot[] command creates its own coordinate context and so you can introduce distortions you don't intend unless you apply a great deal of care. Secondly, mixing different graphical elements is easiest to do in Graphics[] as well.
First of all, decide how to draw the 4 cosine curves. I noticed that your diagrams simply have 4 cycles and no axes so I dispensed with the frequency and duration you used. Here we have a quick set of 4 cosines in a column:
With[{baseline = -2.5 {0, 1, 2, 3}, t = Range[-2, 2, 0.01]},
Module[{s},
s = Cos[2 Pi t];
Graphics[{
Table[Line@Thread@{t, s + baseline[[k]]}, {k, 1, 4}]
}]
]
]
Notice I separated the curves by a little more than their peak to peak height.
Now we want to draw the dots in a systematic way. Imagine each set of dots is drawn with respect to a point on the baseline associated with the cosine curve. We can use the baseline index to also choose that time position.
With[{baseline = -2.5 {0, 1, 2, 3}, t = Range[-2, 2, 0.01], tdots = {-1.5, -0.5, 0.5, 1.5}},
Module[{s, dots},
s = Cos[2 \[Pi] t];
dots[k_] := With[{td = tdots[[k]], y0 = baseline[[k]] + 0.15, dy = 0.4, r = 0.16},
{Red, Disk[{td, y0 + dy}, r], Disk[{td, y0}, r], Disk[{td, y0 - dy}, r]}
];
Graphics[{
Table[Line@Thread@{t, s + baseline[[k]]}, {k, 1, 4}],
Table[dots[k], {k, 1, 4}]
}]
]
]
Now let's add the arrows. We will call them hop's. Here we will also assign the output to the variable g for export below.
g = With[{baseline = -2.5 {0, 1, 2, 3}, t = Range[-2, 2, 0.01],
tdots = {-1.5, -0.5, 0.5, 1.5}},
Module[{s, dots, hop},
s = Cos[2 \[Pi] t];
dots[k_] :=
With[{td = tdots[[k]], y0 = baseline[[k]] + 0.15, dy = 0.4, r = 0.16},
{Red, Disk[{td, y0 + dy}, r], Disk[{td, y0}, r], Disk[{td, y0 - dy}, r]}
];
hop[k1_, k2_] := With[{y = baseline[[k1]] + 1, t1 = tdots[[k1]], t2 = tdots[[k2]]},
Arrow[BezierCurve[
{{t1, y}, {0.9 t1 + 0.1 t2, y + 0.5}, {0.1 t1 + 0.9 t2, y + 0.5}, {t2, y}}]
] ];
Graphics[{
Table[Line@Thread@{t, s + baseline[[k]]}, {k, 1, 4}],
Table[dots[k], {k, 1, 4}],
hop[1, 2], hop[2, 3], hop[3, 4], hop[4, 1]
}]
]
]
You want to export to a pixel oriented format like png as opposed to a photographic image format like jpg because the jpg image compression can introduce artifacts. This command will save the png file in the same directory as the notebook containing this code.
Export[FileNameJoin[{NotebookDirectory[], "dot_hops.png"}],g,ImageResolution->200]