You can use the Panel library to separate the plot from the widgets, then layout the parts in any way you want using Panel’s layout capabilities.

### Code example

```
import numpy as np
import holoviews as hv
import panel as pn
from holoviews import opts
hv.extension('bokeh')
opts.defaults(opts.Curve(line_width=1))
# Create dummy data
def fm_modulation(f_carrier=220, f_mod=220, mod_index=1, length=0.1, sampleRate=2000):
sampleInc = 1.0/sampleRate
x = np.arange(0,length, sampleInc)
y = np.sin(2*np.pi*f_carrier*x + mod_index*np.sin(2*np.pi*f_mod*x))
return hv.Curve((x, y), 'Time', 'Amplitude')
f_carrier = np.linspace(20, 60, 3)
f_mod = np.linspace(20, 100, 5)
curve_dict = {(fc, fm): fm_modulation(fc, fm) for fc in f_carrier for fm in f_mod}
kdims = [hv.Dimension(('f_carrier', 'Carrier frequency'), default=40),
hv.Dimension(('f_mod', 'Modulation frequency'), default=60)]
holomap = hv.HoloMap(curve_dict, kdims=kdims)
# At this point you can just plot the holomap to get the widgets to the right of the plot
# Convert the holomap into a panel
holomap_panel = pn.panel(holomap)
# You can inspect this object to see that it can be accessed by index, where the object at index 0 is the plot while the object at index 1 is the widget panel
plot = holomap_panel[0]
widgets = holomap_panel[1]
# Create a new layout in any way you want, for example in a column with the widgets below the plot
new_layout_panel = pn.Column(plot, widgets)
# Visualize
new_layout_panel.servable()
# You can even see that the widgets object can be split up into the two range sliders, and you could split those up and position in any way you want as well using Panel
```