Why custom colors without scale_fill_identify does not work in ggplot?

The scale_fill_... functions determine the scale used for the fill aesthetic, which would be the color used. If you don't include it, it uses the default ggplot color scale.

By providing a scale_fill_... function, you replace the default color scale with one of your choice –