#PowerShell 5.1, <s>108</s> 98 Bytes
param($x)$a=" vibgyor"*($x+=$x/7-replace'\..*');$x..0|%{' '*$_+-join$a[$x..$_+$_]+-join$a[$_..$x]}
This one doesn't feel great but is pretty alright now. Banker's rounding is still the devil and there's probably a way to save and reverse the left-side instead of a 2nd 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