hggroup() creates an hggroup in the current axes in the current figure.
If there is no current figure, then a new figure is created and made the current figure. If there is no current axes, then a new axes is created in the current figure and made the current axes. Finally, an hggroup is created.
If you want to create an hggroup in a new figure that's invisible, then create the invisible figure right before creating the hggroup:
Better is to store handles to the graphics objects (figure, axes, etc.) you create and use the handles to specify where other objects belong:
my_fig = figure('Visible','off');
my_group = hggroup(my_ax);