PowerShell, 108 98 89 85 bytes
param($x)($x+=$x/7-replace'\..*')..0|%{' '*$_+-join(" vibgyor"*$x)[$x..$_+$_+$_..$x]} This one feels pretty alright now. Banker's rounding is still the devil and I figured out how to make a non-dumb join. I tried monkeying with $ofs to not much success. Speaking of, the results without joins look pretty good, a bit melty:
vvv v v v rrr v v r ooo r v v r o yyy o r v v r o y ggg y o r v v r o y g bbb g y o r v v r o y g b iii b g y o r v v r o y g b i vvv i b g y o r v v r o y g b i v v i b g y o r v