Cheap has a negative connotation as if someone were to be cheap, they would not want to spend their money for any reason.
Frugal has a positive connotation meaning a person is responsible with their money and won't spend it on things that aren’t needed.